[Regex] Variable darf nur Buchstaben, Zahlen und Unterstrich enthalten

atwo

notorisch abwesend
ID: 195558
L
20 April 2006
2.275
138
Hi,
ich möchte prüfen, ob eine Variable andere Zeichen außer Buchstaben, Zahlen und Unterstrich enthält:
PHP:
preg_match('/[^0-9_a-Z]/',$var);
Das Ding liefert immer true zurück, auch wenn ich Sonderzeichen oder Leerzeichen eingebe. Sieht jmd., wo das Problem liegt?

Gruß, atwo
 
Naja, du prüfst damit auch nur, ob überhaupt irgendwo eines der genannten Zeichen vorkommt. Folgendes sollte funktionieren
PHP:
preg_match('/^[0-9_a-Z]*$/',$var);
(^ bedeutet Anfang des Strings, $ bedeutet Ende)
 
@MrToiz:
Nein, du hast was übersehen. Der RegExp ist eigentlich schon richtig. atwo negiert die Charakterklasse ja, d.h. der RegExp match immer dann, wenn ein fremdes Zeichen vorkommt.

@atwo:
Der Fehler liegt im Detail. Ich empfehle dir, zu Entwicklungszwecken error_reporting auf E_ALL zu stellen, dann hättest du den Fehler selber gefunden:
'a' (97) ist größer als 'Z' (90), folglich macht 'a-Z' keinen Sinn. Wenn du Groß- und Kleinbuchstaben haben willst, musst du 'a-zA-Z' schreiben oder den Modifier 'i' einsetzen.
PHP:
preg_match('/[^0-9_a-z]/i', $var);
// oder
preg_match('/[^0-9_a-zA-Z]/', $var);