PHP preg_match Pattern String erlaubt Sonderzeichen trotz gewolltem Verbot

raven16

Lieutenant
Dabei seit
Nov. 2008
Beiträge
580
Hi,

ich möchte mit
PHP:
if(preg_match("#^([a-zA-z]{3,}\d*)(-?)([a-zA-z0-9]*)$#", $sp_benutzer) == 0)
	$error_benutzer = '<label class="text-danger">Benutzername (ungültig)</label>';
die Eingabe eines Benutzernamens prüfen.
Leider lässt dies die Eingabe "[][" zu. Woran liegt das? Ich lasse doch nur [a-zA-z]{3,} mindestens zu.

Gruß
 

Yuuri

Fleet Admiral
Dabei seit
Okt. 2010
Beiträge
12.577
a-zA-z

Jetzt sieh dir die ASCII-Tabelle an und was zwischen A (65) und z (122) liegt.
 

raven16

Lieutenant
Ersteller dieses Themas
Dabei seit
Nov. 2008
Beiträge
580
Danke das ist der Fehler, aber ist das nur in PHP so oder auch in anderen Sprachen wie z.B. Java? Hätte das dann prinzipiell falsch verstanden / beigebracht bekommen. Wie müsste ich es dann richtig machen? Mit oder Zeichen trennen? Kann ich das nicht so in den eckigen Klammern festlegen?
 

Yuuri

Fleet Admiral
Dabei seit
Okt. 2010
Beiträge
12.577
Das ist wahrscheinlich in jeder Sprache so. Wenn du nach Kleinbuchstaben filtern willst, nutzt du entsprechend a-z, Großbuchstaben sind ergo A-Z. Wenn du es aber sowieso case insensitive machen willst (heißt Klein- und Großbuchstaben), warum nicht einfach a-z und den i-Modifier dran setzen? Gleicher Effekt, weniger Fehlerquellen, kürzerer Code.
 

blöderidiot

Captain
Dabei seit
Juni 2004
Beiträge
3.346
Danke das ist der Fehler, aber ist das nur in PHP so oder auch in anderen Sprachen wie z.B. Java?
Das ist ASCII und wie oben schon gesagt eine feste Konvention in der Anordnung der Zeichen.

Hätte das dann prinzipiell falsch verstanden / beigebracht bekommen. Wie müsste ich es dann richtig machen? Mit oder Zeichen trennen? Kann ich das nicht so in den eckigen Klammern festlegen?
Weiss nicht was Du mit dem Satz genau meinst. Was willst Du "Zeichen trennen" oder "Klammern festlegen"? Wie soll die Suchmenge exakt aussehen?

Ich würde es im Prinzip so oder so machen:

PHP:
   if(preg_match('/^[[:alnum:]]{3,80}$/', $sp_benutzer) == 0) {
        echo $err_msg_ivc;
   }
   
   if(strlen($sp_benutzer)<4 || ctype_alnum($sp_benutzer)==0) {
        echo $err_msg_ivc;
   }
 
Zuletzt bearbeitet:
Top