Per reguläre Ausdrücke Eingabe überprüfen
Robert
- php
Hallo
Ich stehe momentan vor einem kleinen Problem.
Ich hab das Projekt eines Kollegen übernommen, der leider momentan mir nicht helfen kann.
Es geht um eine einfache Abfrage die er geschrieben hat und zwar diese:
if(!preg_match("/[1]*$/" , $_POST["lo_bezeich"]))
{
$errno = 1;
$error .= "<br> - Diese Bezeichnung enthält ungültige Zeichen! (Nur a-z, A-Z, 0-9, '-' und '.')";
}
Sie überprüft ob im $_POST["lo_bezeich"] entweder Zahlen, Buchstaben, der Punkt (".") oder ein Minus hat.
Allerdings sollen auch Leerzeichen erlaubt sein, nun hab ich einen anderen Kollegen gefragt, dieser meinte es mit /s zu probieren, hat allerdings nicht hingehauen.
Könntet ihr vielleicht mir die obrige Abfrage erweitern, sodass auch leerzeichen erlaubt sind?
a-zA-Z0-9-. ↩︎
Hi,
Allerdings sollen auch Leerzeichen erlaubt sein,
Leerzeichen schreiben sich in Regular Expressions wie folgt: " " (ohne die Anführungszeichen)
nun hab ich einen anderen Kollegen gefragt, dieser meinte es mit /s zu probieren,
Das glaube ich nicht. Er hat vermutlich \s gesagt, wobei das mit der Anforderung, Leerzeichen zu erlauben, nur wenig zu tun hat.
Cheatah
Leerzeichen schreiben sich in Regular Expressions wie folgt: " " (ohne die Anführungszeichen)
Also muss die Abfrage so aussehen?
if(!preg_match("/[1]*$/" , $_POST["lo_bezeich"])) //
{
$errno = 1;
$error .= "<br> - Diese Bezeichnung enthält ungültige Zeichen! (Nur a-z, A-Z, 0-9, '-' und '.')";
}
Nochmal die wichtige Stelle: [a-zA-Z0-9-. ] <-- einfach hinter den Punkt?
Klappt leider nicht, oder ich täusche mich (sitze gerade an einen anderen Rechner, schau gleich nach).
Würde aber meinen, dass das so nicht geklappt hat.
a-zA-Z0-9-. ↩︎
Hi,
Also muss die Abfrage so aussehen?
ungefähr. Schaue Dir die RegExp noch mal an, beobachte dabei die Verwendung des "-", schlussfolgere über dessen Bedeutung. Lies hierzu ggf. auch die Dokumentation.
$error .= "<br> - Diese Bezeichnung enthält ungültige Zeichen! (Nur a-z, A-Z, 0-9, '-' und '.')";
Diese Meldung stimmt dann nicht mehr.
Klappt leider nicht,
"Klappt nicht" klappt nicht. Fehlerbeschreibung, bitte.
Cheatah
Hi,
ich gebe dir mal ein paar Alternativen, eine davon wird schon hinhauen. :)
einfach mal ein Leerzeichen in die [] eingefügt:
preg_match("/[1]*$/", ...
vielleicht muss man statt Leerzeichen \s nehmen, bin aber nicht sicher dass das auch in den [] interpretiert wird:
preg_match("/[2]*$/", ...
es kann auch gut sein, dass das Leerzeichen nicht am Ende stehen sollte und es nur so funktioniert:
preg_match("/[3]*$/", ...
preg_match("/[4]*$/", ...
zur Not macht man das halt mit einem ODER (| Zeichen). Bei diesem Beispiel bin ich mir sehr sicher dass das so geht:
preg_match("/^([a-zA-Z0-9-.]|\s)*$/", ...
Gruß,
Cruz
zur Not macht man das halt mit einem ODER (| Zeichen). Bei diesem Beispiel bin ich mir sehr sicher dass das so geht:
preg_match("/^([a-zA-Z0-9-.]|\s)*$/", ...
Vielen Dank, hat funktioniert... seltsam... hab ich wirklich statt "\s" "/s" geschrieben *schähm*
Danke :)
(bin neuling im Gebiet der regulären Ausdrücke)
Hallo Robert.
(bin neuling im Gebiet der regulären Ausdrücke)
Zum Testen gibt es u. A. den PCRE Evaluator, der anzeigt, auf welchen Teil eines Strings eine RegEx matcht.
Einen schönen Dienstag noch.
Gruß, Ashura