[PHP] Slash in preg_match

Dieses Thema im Forum "Webentwicklung" wurde erstellt von master2005, 3. September 2012 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 3. September 2012
    Slash in preg_match

    Hallo

    warum klappt dies hier nicht

    !preg_match("/^[-&.a-z0-9äöüß/ ]*$/i", $_POST["XXX"]

    ich will ein / erlauben. Doch klappt dies nicht.
     
  2. 3. September 2012
    AW: backslash preg_match

    Kann daran liegen, dass du als Begrenzung die "/" nimmst und mittendrin dieses Zeichen verwendest. Du musst als Begrenzung ein anderes Zeichen als / nehmen.

    //edit: nimm am besten das @ Zeichen, also so:
    PHP:
    ! preg_match ( "@^[-&.a-z0-9äöüß/ ]*$@i" $_POST [ "XXX" ]);
    greez
     
  3. 3. September 2012
    AW: backslash preg_match

    Man nennt die Lösung "Maskieren" einfach einen Backslash davor stellen.
    Aus / wird dann \/

    PHP:
    ! preg_match "/^[-&.a-z0-9äöüß\/ ]*$/i" $_POST [ "XXX" ] );
     
  4. 3. September 2012
    Zuletzt bearbeitet: 3. September 2012
    AW: backslash preg_match

    Kann auch funktionieren, ist imho aber eher verwirrend, da man z.B. den Punkt (.) auch escapen müsste, da er ja eigentlich für "jedes Zeichen" steht. In diesem Fall muss man den Slash aber maskieren/escapen, weil er den regulären Ausdruck eingrenzt.

    greez

    //edit: hab gerade nachgelesen, wie sich das mit den Begrenzern verhält: also du darfst als Begrenzer (in deinem Fall /) jedes nicht-alpha-numerische ASCII Zeichen nehmen, außer Whitespace und Backslash. Wenn es ein öffnendes Zeichen ist, also ( < [ {, dann musst du am Ende das schließende Äquivalent nutzen.
     
  5. 4. September 2012
    Zuletzt bearbeitet: 4. September 2012
    AW: backslash preg_match

    äh, ja den punkt (.) muss man auch escapen, das ist richtig. das minus (-) im übrigen auch (so lange es nicht am anfang oder ende steht, wie in diesem fall)

    "/" ist eben der gängigste begrenzer für reguläre ausdrücke (in perl/javascript sorgar als sprach-konstrukt), von daher schon ne gute wahl.

    zudem können editoren (z.b. sublime text 2) den string entsprechend hervorheben wenn er mit nem "/" beginnt.

    meine empfehlung:
    immer "/" als begrenzer und niemals " " für reguläre ausdrücke nutzen (wegen \r \n \t [...])!

    PHP:
    ! preg_match ( '/^[\-&\.a-z0-9äöüß\/ ]*$/i' $_POST [ "XXX" ]);
     
  6. 4. September 2012
    Zuletzt von einem Moderator bearbeitet: 4. September 2012
    AW: backslash preg_match

    Den Punkt (.) muss man nicht escapen, wenn er in einer Zeichenklasse vorkommt, nur außerhalb. Und das Minus (-) auch nur dann (wie du schon gesagt hast), wenn es nicht am Anfang der Zeichenklasse steht oder im periodischen Kontext. Also a-z, B-Q oder 4-8 geht in Ordnung. Grundsätzlich muss man aber innerhalb einer Zeichenklasse GAR nichts maskieren, außer eben die Begrenzer.

    greez
     
  7. 4. September 2012
    AW: backslash preg_match

    stimmt ganz vergessen, (.) muss nicht escaped werden. da hast du mich oben doch ein wenig aus dem konzept gebracht...
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.