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ß
 
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?
 
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.
 
Zitat von raven16:
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:
Zurück
Top