Ich habe einen Regulären Ausdruck, um damit bei einer Usereingabe (genauer ein Dateiname) zu prüfen, ob wirklich auch nur A-Z, a-z, der Unterstrich _ , ein Hochkomma ’ oder ein Strich - enthalten ist.
Wenn ich diesen aber mit der Funktion preg_match teste, wird mir bei allen Strings true (1) zurückgegeben:
[PHP]
$allowed_chars_regex = „/[a-zA-Z_-']+/“ ;
#=> Hier sollte false herauskommen, es kommt jedoch true
echo (preg_match($allowed_chars_regex, „öl%&/“));
#=> Hier kommt richtigerweise true heraus
echo (preg_match($allowed_chars_regex, „rollo“));[/PHP]
Es scheint, als hätte ich meine eigene RegExp bzw. den Aspekt nicht verstanden, dass nur ein Match dem RegExp entsprechen muss.
Und deswegen danke an struppi, aufgrunddessen mir eingeleuchtet ist, warum es nicht funktioniert und auch an Commodore, weil ich nun nicht nach einer funktionierenden Lösung mehr suchen muss (:
#=> Hier sollte false herauskommen, es kommt jedoch true
echo (preg_match($allowed_chars_regex, „öl%&/“));[/PHP]
Dein Code ist schon richtig. Allerdings sagst du, dass an beliebieger Stelle mindestens eines der Zeichen a-z, A-z _ - und ’ vorkommen muss.
Folglich stimmt die bedingung, denn in öl%&/ kommt ein „l“ vor, dass auf diese Bedindung passt.
Was du im regex vergessen hast ist folgendes
[PHP]
$allowed_chars_regex = „/[1]+/$“ ;
[/PHP]
Damit sagst du ihm, dass deine Zeichenkette von ANFANG (^) bis zum ENDE ($) zutreffen muss, und nicht wie ich oben schrieb, nur ein beliebiger Teil.