preg_match prüfen auf einfaches Hochkomma
Andy
- php
Hallo,
ich wollte eine Formularvalidierung auf Sonderzeichen durchführen.
Ich hatte mir das so gedacht.
$verboten='#["\"<\"">\"]#';
und dann weiter
if( preg_match($verboten, $_POST['name'])) {
$fehler[] = 'Bitte keine Sonderzeichen im Feld Name';
Im Prinzip klappt das ja, aber wie kann ich auf das einfache 'Hochkomma' prüfen?
Danke
Andy
Hi,
ich wollte eine Formularvalidierung auf Sonderzeichen durchführen.
prüf lieber auf erlaubte Zeichen, davon gibt es garantiert weniger.
$verboten='#[""<"">"]#';
Verboten sind also Doublequotes, die öffnende spitze Klammer, Doublequotes, Doublequotes, die schließende spitze Klammer und Doublequotes. Mann, Du gehst echt auf Nummer sicher!
Cheatah
Hallo,
erlaubte Zeichen also
dann müsste ich
1.$erlaubt festlegen, weiß ich noch nicht wie, muss ich suchen.
und dann
2.
if(!preg_match($erlaubt, $name))
Ich denke das bekomme ich hin.
Doublequotes, Doublequotes, die schließende spitze Klammer und Doublequotes. Mann, Du gehst echt auf Nummer sicher!
ja war wohl etwas viel , sorry
Kann mir trotzdem jemand verraten, wie ich die einfachen Hochkommas ausschließe?
Danke
Andy
Hi,
dann müsste ich
1.$erlaubt festlegen, weiß ich noch nicht wie, muss ich suchen.
genauso wie $verboten, nur dass Du entweder den String von Anfang bis Ende durchsuchst, oder aber auf das Vorkommen des Gegenteils der erlaubten Zeichen prüfst. Beides sind Grundlagen der Regular Expressions.
Kann mir trotzdem jemand verraten, wie ich die einfachen Hochkommas ausschließe?
Genauso wie Du z.B. ein "A" ausschließt. Mir ist nicht klar, welches Problem Du damit hast; Singlequotes haben in Regular Expressions keine besondere Bedeutung.
Cheatah
Hallo Cheatah,
ich habe nich ein bisschen gesucht.
Ich hoffe das ist richtig.
Erlaube alle Zahlen Buchstaben und Leerzeichen Punkt Minus
wobei
i ignoriert groß/kleinschreibung
m kein Zeilenumbruch
für was steht der Modifikator s
$erlaubt="~^[;,:.+-\s\d./_&A-Z]*$~ism";
$string="a$\"";
if(!preg_match($erlaubt, $string)) {
echo "nix jut";
} else {
echo "jut";}
Jetzt bin ich aber echt am Ende, wie schließe ich das $ aus?
Danke
Andy
Hi,
ich habe nich ein bisschen gesucht.
Ich hoffe das ist richtig.
dass Du nicht gesucht hast? Nö, eigentlich nicht ;-)
- = minuszeichen
In einer Zeichenklasse ist "-" ein Operator, der eine Spanne von Zeichen markiert[1]. Meinst Du es nicht in diesem Sinne, musst Du es in der Zeichenklasse maskieren.
s = leerzeichen
Nein, "s" ist ein "s". "\s" sind(!) Whitespaces, nicht nur Leerzeichen.
d = digits
"d" ist "d", "\d" sind Digits.
. = punkt
Innerhalb einer Zeichenklasse stimmt dies, außerhalb derselben steht es für ein beliebiges Zeichen (üblicherweise bis auf Umbrüche).
m kein Zeilenumbruch
für was steht der Modifikator s
Gewissermaßen für das Gegenteil von "s": "^" und "$" werden auf einzelne Zeilen angewendet.
Jetzt bin ich aber echt am Ende, wie schließe ich das $ aus?
Indem Du es nicht erlaubst. Deine RegExp enthält noch Fehler, die Du mit obigen Informationen finden kannst.
Cheatah
Hi Cheatah,
ich habe nich ein bisschen gesucht.
Hmm eigentlich sollte das "nich" noch heissen, vertippt.
Beim Suchen ist mir aufgefallen, dass reguläre Ausdrücke, eine Spezialität von Dir zu scheinen sein. Ich las Deinen Namen auch in anderen Foren, zu diesem Thema.
Ich hoffe jetzt habe ich es
$erlaubt="~^[ \.+:;,\d\w-]*$~ism";
\d Ziffer, [0-9]
\w Wortzeichen, [a-zA-Z0-9_]
Am Anfang ist ein Leerzeichen
Jetzt wird auch eine Textarea nach manuellen Zeilenumbruch weiter durchsucht.
Ist das jetzt korrekt?
Viele Grüße
Andy
für was steht der Modifikator s
der Modifier bewirkt dass . auf \n matchen kann.
"\n" =~ /./ # Matcht nicht
"\n" =~ /./s # Matcht
[code lang=php]
$erlaubt="~[1]*$~ism";
^
mfg Beat
;,:.+-\s\d./_&A-Z ↩︎
Hallo Beat,
danke für die Erklärung !
Andy ^
- ist ein Range Zeichen [a-z] [0-9]
Wenn du es nutzen willst musst du es entweder als letztes Zeichen der Zeichenklasse aufführen [a-z-]
oder maskieren [-a-c]mfg Beat