Flori: Mein regulärer Ausdruck macht nicht was ich will!

Hi,
das php-script

  
<?php  
   $wert = "0123457-345455444";  
   if (!preg_match('/^0[0-9]{2,4}[-]?[0-9]{3,}/', $wert))  
     echo "Fehler";  
   else  
     echo "OK";  
?>  

sollte nach meiner Meinung folgendes erlauben:
0123456789
012-3456789
0123-456789
01234-56789
aber nicht:
012345-6789
und erst recht nicht
0123456-789
Es akzeptiert aber auch den obigen Wert 0123457-345455444
Wo liegt mein Denkfehler?
Gruß
Flori

  1. Hi,

    if (!preg_match('/^0[0-9]{2,4}[-]?[0-9]{3,}/', $wert))

    sollte nach meiner Meinung folgendes erlauben: [...]
    aber nicht:
    012345-6789

    Beginnt mit 2 Ziffern, gefolgt von keinem -, gefolgt von 3 Ziffern – passt.

    und erst recht nicht
    0123456-789

    Beginnt mit 2 Ziffern, gefolgt von keinem -, gefolgt von 3 Ziffern – passt.

    Es akzeptiert aber auch den obigen Wert 0123457-345455444
    Wo liegt mein Denkfehler?

    Keine Ahnung – du hast und ja nicht beschrieben, was du dir bei dem Ausdruck gedacht hast.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  2. Hi,

    <?php
       $wert = "0123457-345455444";
       if (!preg_match('/^0[0-9]{2,4}[-]?[0-9]{3,}/', $wert))
         echo "Fehler";
       else
         echo "OK";
    ?>

    
    > sollte nach meiner Meinung folgendes erlauben:  
    > [...]  
    > aber nicht:  
    > 012345-6789  
      
    
    > Wo liegt mein Denkfehler?  
      
    Du hast den Regex nur vorne veranktert, nicht hinten.  
      
    Bis die Tage,  
    Matti
    
    -- 
    [Webapplikationen in C++ entwickeln](http://tntnet.org/)
    
  3. Hallo,

    if (!preg_match('/^0[0-9]{2,4}[-]?[0-9]{3,}/', $wert))
    Es akzeptiert aber auch den obigen Wert 0123457-345455444

    warum auch nicht?
    Der Wert beginnt mit der Ziffer 0,
    dann folgen zwei bis vier Ziffern (nämlich 12 oder 123),
    dann folgt ein optionales Minuszeichen, das in diesem Fall nicht da ist,
    und dann weitere drei oder mehr Ziffern (nämlich 3457 oder 457).

    Passt. :-)

    Wo liegt mein Denkfehler?

    Kann ich nicht genau sagen, da ich die Anforderung nicht kenne.

    Ciao,
     Martin

    --
    Ordnung schaffen heißt, das Eigelb vom Dotter zu trennen.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  4. Hi,

    $wert = "0123457-345455444";
       if (!preg_match('/^0[0-9]{2,4}[-]?[0-9]{3,}/', $wert))
         echo "Fehler";
       else
         echo "OK";
    ?>
    [/code]
    sollte nach meiner Meinung folgendes erlauben:
    0123456789
    012-3456789
    0123-456789
    01234-56789
    aber nicht:
    012345-6789
    und erst recht nicht
    0123456-789
    Es akzeptiert aber auch den obigen Wert 0123457-345455444

    Das liegt daran, daß die Regex-Engine sich nicht nach Deiner Meinung richtet, sondern nach dem gegebenen Regex - und der erlaubt nunmal die gegebenen Werte - wie, das wurde ja bereits gesagt.

    Wo liegt mein Denkfehler?

    Am Ende. ;-)
    Am fehlenden Geld ($).

    Wenn der Ausdruck das machen soll, was ich vermute, ist er aber auch inhaltlich falsch - es gibt auch Telephon-Vorwahlen in Deutschland mit mehr als 4 Ziffern nach der 0 (z.B. Abberode 034779)

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.