Andy: preg_match prüfen auf einfaches Hochkomma

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

  1. 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

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. 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

      1. 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

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hallo Cheatah,

          ich habe nich ein bisschen gesucht.
          Ich hoffe das ist richtig.
          Erlaube alle Zahlen Buchstaben und Leerzeichen Punkt Minus
          wobei

          • = minuszeichen
            s = leerzeichen
            d = digits
            . = punkt

          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

          1. 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

            --
            X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. Gauten Abend  Cheatah,

              danke.

              ich bin jetzt schon fast 5 Stunden an dem Problem, jetzt bin ich zu müde.

              $erlaubt="~[1]*$~ism";

              Wenn es das jetzt nicht ist, muss ich morgen weitermachen;)

              Danke
              Andy


              1. .?;:,"+-\s\d\w ↩︎

            2. 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

          2. 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";

            ^

            • 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

            --
            Woran ich arbeite:
            X-Torah
            ><o(((°>           ><o(((°>
               <°)))o><                     ><o(((°>o

            1. ;,:.+-\s\d./_&A-Z ↩︎

            1. 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