Tobias Otto: preg_match

Hallo,

ich möchte folgende zeichenfolge kontrollieren
1|12323142|2|25345423

habe es folgendermaßen probiert
preg_match("/1|[0-9]{8}+|2|[0-9]{8}/i", $status)

aber irgendiwe klappts nicht so richtig. irgendwie bringt er mir immer ein positives ergebnis

auch wenn ich meine zeichenfolge abänder
1|12323142|2|25345423 <- davor
1|1232314225345423 <- danach
eigentlich müsste er doch bei der abgeänderten zeichenfolge keine übereinstimmung finden

  1. Hallo!
    [...]

    aber irgendiwe klappts nicht so richtig. irgendwie bringt er mir immer ein positives ergebnis

    [...]
    Weil die Pipe "|" eine spezielle Bedeutung bei regulären Ausdrücken hat.
    Versuchs mal mit maskierter Pipe, also "|" statt "|".

    --
    LG,
    Snafu
    1. Hallo!

      Habs jetzt so gemacht

      preg_match ("/1|[0-9]{8}+|2|[0-9]{8}/i", $status)

      jetzt bekomme ich gar kein Ergebnis mehr, obwohl die Zeichenfolgen eigentlich richtig ist
      1|12323142|2|25345423

      1. Hallo!

        jetzt bekomme ich gar kein Ergebnis mehr, obwohl die Zeichenfolgen eigentlich richtig ist

        Poste bitte mal deinen Code.

          
        <?php  
        $status = "1|12323142|2|25345423";  
        if(preg_match ("/1\|[0-9]{8}+\|2\|[0-9]{8}/i", $status)) { // hier passts  
         echo "Yes";  
        } else {  
         echo "No";  
        }  
        echo "\n";  
          
        $status = "12|12323142|2|25345423";  
        if(preg_match ("/1\|[0-9]{8}+\|2\|[0-9]{8}/i", $status)) { // hier nicht  
         echo "Yes";  
        } else {  
         echo "No";  
        }  
        echo "\n";  
        ?>  
          
        
        

        liefert bei mir wie erwartet
        Yes
        No

        --
        LG,
        Snafu
        1. Ach ja, da man Zahlen meines Wissens nach nicht groß oder klein schreiben kann (übers Keyboard wenigstens) brauchst du den "i" Modifier nicht.
          Es reicht also:

            
          preg_match ("/1\|[0-9]{8}+\|2\|[0-9]{8}/", $status)  
          
          
          --
          LG,
          Snafu
          1. Hallo,

            also es gibt folgende Möglichkeiten
            entweder steht in der sqp
            1|15022008
            oder
            1|10022008|2|15022008
            oder
            1
            oder
            2

            hier mein script

            if (preg_match("/1|[0-9]{8}/i", $status)) {
            $status = explode("|", $status);
            echo "Bezahlt: am ".$status[1]."<br />
            Verschickt:";
            } else if (preg_match ("/1|[0-9]{8}+|2|[0-9]{8}/i", $status)) {
            $status = explode("|", $status);
            echo "Bezahlt: am ".$status[1]."<br />
            Verschickt: am ".$status[3];
            } else if ($status == 1) {
            echo "Bezahlt: ja<br />
            Verschickt:";
            } else if ($status == 2) {
            echo "Bezahlt: ja<br />
            Verschickt: ja";
            }

            irgendwie meint er immer er soll das erste if ausführen obowhl in der sql in dem fall der fall 2 steht
            1|10022008|2|15022008

            1. Hallo!

              irgendwie meint er immer er soll das erste if ausführen obowhl in der sql in dem fall der fall 2 steht

              Schau dir nochmal deine beiden ersten Fälle an:

              1|15022008
              oder
              1|10022008|2|15022008

              Der erste schaut dem 2ten ziemlich ähnlich oder?
              Entweder du prüfst zuerst den 2ten der beiden (weil spezifischer) oder du sagst dem Regex, dass beim 1ten nachher nichts mehr stehen soll.

              Das geht so:

                
              if (preg_match("/1\|[0-9]{8}$/i", $status)) { // $ am schluss anhängen  
                  ...  
              }  
              
              

              Schau dir doch mal z.B. http://tut.php-quake.net/regex.html an. Dein "Problem" besteht eigentlich nur aus Regex Grundlagen.

              --
              LG,
              Snafu
              1. Danke!

                Das habe ich nicht gewusst, dass ich mit $ diese Operation abschließe