Namensvalidierung

lisali

Erfahrenes Mitglied
Hallo,

ich möchte gerne etwas über Namensvalidierung wissen.

Also, ich hab den folgenden Code von der php.net Manual:

PHP:
if(ereg('[^0-9A-Za-z]',$_POST['name']))

Und das prüft ja nur alle Ziffern, A-Z und a-z. Es ist ja üblich, dass man noch den Unterstrich erlaubt und manchmal auch das Minus für den Usernamen bei einer Registrierung.

Warum erlaubt man eigentlich nicht die anderen Zeichen? Aus ästhetischen Gründen oder hat das was mit MySQL zu tun?

Und wie kann ich jetzt z.B. bei dem Code noch hinzufügen, dass auch Unterstriche erlaubt sind?


Vielen Dank schonmal!
 
item: Ich würde preg_match anstelle von ereg verwenden
Hinweis: Die Funktion preg_match(), die eine zu Perl kompatible Syntax regulärer Ausdrücke verwendet, ist häufig die schnellere Alternative zu ereg().

item: Warum schliesst du die Zahlen und Buchstaben aus? (^ ist zum ausschliessen)

item: um den ganzen String zu testen das Pattern mit ^ und $ umgeben.

item: [A_Za-z0-9] kann man ersetzen durch [:alnum:]

PHP:
// das Suchmuster mit Delimiter und Modifer (falls vorhanden) 
$pattern = '/^[[:alnum:]_\-]+$/';

// RegEx mit preg_match() auswerten 
if(preg_match($pattern, $string)=0){
    echo 'ungültiger Name';
}

Und hier eine Nette Seute zum testen:
http://www.regex-tester.de/regex.html
 
Zuletzt bearbeitet:
Danke für deine Antwort.

Wie erwähnt ist der Code von den Kommentaren von der PHP.net Manual. Das wusste ich nicht.

Wenn ich
PHP:
if (preg_match('/^[[:alnum:]_\-]+$/', $_POST['name'])=0){
benutze, bekomme ich diesen Fehler:

Fatal error: Can't use function return value in write context ...
 
Wie peinlich von mir.... = ist eine Zuweisung. Zum Vergleichen muss man == oder === verwenden
PHP:
if (preg_match('/^[[:alnum:]_\-]+$/', $_POST['name'])==0){  
    echo 'nicht gültig';
}
 
...
Warum erlaubt man eigentlich nicht die anderen Zeichen? Aus ästhetischen Gründen oder hat das was mit MySQL zu tun?...
Das hat m.E. eher was mit der Vielzahl unterschiedlicher Betriebssysteme zu tun, die nun wieder unterschiedliche Namensgestaltung und reservierte Zeichen vorschreiben. Um da portabel und kompatibel zu bleiben wurde POSIX "erfunden", dessen Dateinamen-Konvention du eben überprüfen willst.
 
Vielen Dank für die Info.

Ich hätte jetzt noch eine zusätzliche Frage. Ich würde gerne alle Leerzeichen, die außerhalb eines Wortes gemacht wurden automatisch entfernen.

Also wenn man schreibt:
"user name" = Fehlerausgabe
"us er name" = Fehlerausgabe

Aber wenn man schreibt:
" username" oder "username " (also ein zusammengeschriebenes Wort), dann sollen die Leerzeichen entfernt werden.

Wie kann ich das machen?
 
trim()
PHP:
$string = " Test    ";
$string = trim($string);

Und dann erst mit dem Regulären Ausdruck testen...
 

Neue Beiträge

Zurück