Gonzo: Sonderzeichen für Formularfelder

Beitrag lesen

die werden dir aber auch gegeben, damit man du dich SELF damit beschäftigst.
Kann doch nicht sein, dass du nochmal einen Ausdruck postest, ohne die bisherigen Antworten anzuwenden :(

SORRY, aber hilf lieber keinem mit deinem E=mc²

Nana, immer schön ruhig mit den wilden Pferden. Worauf plan_b hinauswollte, war, dass ich schrieb

in einer Zeichenklasse (eckigen Klammern) ein Oder zwischen einzelnen Zeichen erforderlich sein müsste, dem ist aber nicht so.

und du gleich darauf ein Muster präsentiert hast, indem du genau diesen Fehler wieder machst:

^([a-zA-Z0-9 |%|&|$|!|?|+|:|ä|ö|ü|-|à|è|ò|é|á|ó|ú|ù|.|(|)]{3,})$

Nochmal, die senkrechten Striche, die andernorts für ein Oder stehen, sind in der in eckigen Klammern stehenden Zeichenliste nicht nötig.
Obendrein machst du den Fehler, den Bindestrich falsch zu setzen. Wenn er als Zeichen Bindestrich erscheinen soll, muss er als letztes Zeichen in der Liste kommen, andernorts steht er für von/bis (wie in a-z = alle Buchstaben von a bis z).

[a-zA-Z0-9 %&$!?+:äöüàèòéáóúù.()-]

passt auf genau ein Zeichen aus der in den eckigen Klammern gegebenen Liste, einschließlich des Bindestrichs, jedoch ohne senkrechtem Strich - da wusste ich nicht, ob du den haben willst oder nur als (falsches) Oder benutzt hast.

plan_b hatte (indirekt) schon darauf hingewiesen, befasse dich mal intensiv mit http://de.selfhtml.org/perl/sprache/regexpr.htm#zeichen.
Ich täte dir davon abgesehen dringend raten, die PCRE-Funktionen (preg_match() & Co) zu verwenden; ich möchte behaupten, dass die diesen Funktionen zu Grunde liegende Bibliothek weiter verbreitet ist und bessere Funktionalität bietet. Eine umfangreichere Anleitung als besagte SELFHTML-Seite findest du unter http://de.php.net/manual/de/reference.pcre.pattern.syntax.php, wenn auch auf Englisch.

Warum dieses Muster nun überhaupt nicht passt, kann ich nur vermuten, es sieht mit Ausnahme der Binde- und senkrechten Striche fehlerfrei aus. Eventuell liegt es an unterschiedlichen oder unerwarteten Kodierungen. Sendet der Browser beispielsweise in utf-8, geht der Vergleich in die Hose, weil bei utf-8 mehrere Bytes pro Zeichen jenseits US-ASCII auftreten, womit eregi() aber nicht rechnet, diese Funktion geht von konstant einem Byte aus.
Möglicherweise ist dein PHP-Skript auch einfach nur anders kodiert als die vom Browser kommenden Daten, wenn der Browser den Bytewert 12 für ein ä sendet und in deinem Skript ist das ä als Bytewert 234 gespeichert, wird das auch nichts.
Probiere es erstmal nur mit [1]{3,}$ . Funktioniert's dann, ist die Zeichenkodierung Schuld.

Schau auch in das Fehlerprotokoll des Servers, vielleicht ist ja doch etwas am Muster verkehrt.

auch wenn ich einen hohen Wert(z.B.1000) eintrage kommt die Gleiche Meldung?

Dann kann es definitiv nicht an der geschweiften Klammer liegen.

kann man da nicht für unbegrenzt ein * einsetzen

* steht für beliebig viele, du möchtest aber wohl mindestens drei haben, insofern fällt das Sternchen weg. Und in einer geschweiften Klammer hat das Sternchen eh nix zu suchen, da kommen nur Zahlen oder gar nichts rein; * ist eine kürzere Schreibweise für {0,} .

und wenn ja , dann wie und wo?

Steht oder stünde in besagter Anleitung.


  1. a-zA-Z0-9 %&|$!?+:.()- ↩︎