Dynamite: preg match !^[0-9/-]{6,20}$!

Naben zusammen,
bin mal wieder da um Eure Nerven zu strapazieren. :-)

Überprüfe die Telefonnummer eines Kontaktformulars mit preg_match

  
 if(preg_match("!^[0-9/-]{6,20}$!", $tel)) {  
   $allesok = 1;  
  }else{  
   $allesok = 0;  
        }  

Dachte ich hätte das richtig, aber wenn ich jetzt in das Feld eine e-Mail-Adresse eingebe, akzeptiert er (=> PHP) das. Bin ganz neu in dem Thema, kann mir jemand sagen wo mein Fehler liegt.

Grüße und den Frieden der Nacht
Dynamite

  1. if(preg_match("![1]{6,20}$!", $tel)) {

    ....

      
    Liegt an !, denn ! bedeutet "nicht". Daher bedeutet dein Ausdruck: "wenn \_keine\_ 6 bis 20 beliebige Ziffer oder / oder - am Anfang und am Ende der Zeichenkette vorkommen, dann ist alles in Ordnung.
    

    1. 0-9/- ↩︎

    1. Hallo Xenia!

      if(preg_match("![1]{6,20}$!", $tel)) {
      ....

        
      
      > Liegt an !, denn ! bedeutet "nicht". Daher bedeutet dein Ausdruck: "wenn \_keine\_ 6 bis 20 beliebige Ziffer oder / oder - am Anfang und am Ende der Zeichenkette vorkommen, dann ist alles in Ordnung.  
        
      Ich weiß nicht, wie PHP das hier handhabt, aber ! kann man als RegExp-Delimiter nutzen. Übrigens funktioniert Dynamites RegExp in Perl - auch wenn sie nicht berücksichtigt, dass User Ihre Angabe in der Form notieren können: 0 69 12 34 56 oder (069) 12 34 56 oder wie auch immer.  
        
      ~~~perl
        
      my $allesok = $tel =~ m!^[0-9/-]{6,20}$!g ? "OK" : "WRONG";  
      
      

      Viele Grüße aus Frankfurt/Main,
      Patrick

      --
      _ - jenseits vom delirium - _

         Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
      J'ai 10 ans! | Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?

      1. 0-9/- ↩︎

      1. Re!

        Ich weiß nicht, wie PHP das hier handhabt,

        Genauso. Außerdem muss Dynamites Fehler andere Ursachen haben, denn wie man sieht, ergibt die Angabe einer E-Mail-Adresse »WRONG«.

        Mein (als nicht PHP-ler bescheidener) Code:

          
        <?php  
          
        echo "Dynamites Regexp: <pre>!^[0-9/-]{6,20}\$!</pre>";  
        echo "<br>";  
          
        $tel = "069/123456";  
        $mail = "gogogog@gaga.com";  
          
        echo "TELEFON: \$tel = $tel";  
        echo "<br>";  
        echo "MAIL: \$mail = $mail";  
        echo "<br>";  
          
        $tok = preg_match("!^[0-9/-]{6,20}$!", $tel) ? "OK" : "WRONG";  
        $mok = preg_match("!^[0-9/-]{6,20}$!", $mail) ? "OK" : "WRONG";  
          
        echo "TELEFON: $tok";  
        echo "<br>";  
        echo "MAIL: $mok";  
        echo "<br>--------------------------<br>";  
          
        echo "Andere Regexp: <pre>!^[0-9/\-\s\(\)]{6,20}\$!</pre>";  
          
        $tel = "0 (69) 12 34 56";  
        $mail = "gogogog@gaga.com";  
          
        echo "TELEFON: \$tel = $tel";  
        echo "<br>";  
        echo "MAIL: \$mail = $mail";  
        echo "<br>";  
          
        $tok = preg_match("!^[0-9/\-\s\(\)]{6,20}$!", $tel) ? "OK" : "WRONG";  
        $mok = preg_match("!^[0-9/\-\s\(\)]{6,20}$!", $mail) ? "OK" : "WRONG";  
          
        echo "TELEFON: $tok";  
        echo "<br>";  
        echo "MAIL: $mok";  
        echo "<br>--------------------------<br>";  
          
        ?>
        

        Viele Grüße aus Frankfurt/Main,
        Patrick

        --
        _ - jenseits vom delirium - _

           Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
        J'ai 10 ans! | Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
        1. Hi,
          habe Euch gestern ein wenig Code verschwiegen, aber ich kann mir nicht vorstellen das es daran liegt:

            
          if(!empty($mobil)){  
            if(preg_match("!^[0-9/-]{6,20}$!", $mobil)) {  
             $allesok = 1;  
            }else{  
             $allesok = 0;  
             $error['mobil'] = "Die Mobilfunknummer darf höchstens 20 Ziffern haben und es sind nur Zahlen - und / erlaubt!";  
            }  
           }  
          
          

          Soll also nur greifen wenn $mobil auch einen Inhalt hat. Aber daran dürfte es doch nicht liegen, oder???

          Gruß und Danke für Eure Hilfe
          Dynamite

          1. Hallo Dynamite!

            Soll also nur greifen wenn $mobil auch einen Inhalt hat. Aber daran dürfte es doch nicht liegen, oder???

            Wie erwähnt: Ich bin kein PHP-ler, ich kenne kein empty() in meinem Perl ;)
            Probier's doch mit meinem Test-PHP-Beispiel, ob es daran liegt... ich glaube aber eher, es liegt nicht daran.

            Viele Grüße aus Frankfurt/Main,
            Patrick

            --
            _ - jenseits vom delirium - _

               Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
            J'ai 10 ans! | Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
            1. Hallo zusammen,
              habe das Problem jetzt gelöst. War meine eigene Dummheit. Benutze die Variable $allesok für mehrere Kontrollen von Formulareinträgen. Vor der überprüfung setze ich $allesok auf 1. Wenn ein Eintrag falsch ist, wird $allesok auf null gesetzt, und am Ende überprüfe ich dann den Wert von $allesok. Bei 1 werden die Daten eingetragen, bei 0 nicht.Problem war das ich, wenn preg_match richtig war, $allesok auf 1 gesetzt habe. Nun resultiert da raus, das vorher gesetzte 0 natürlich "überschrieben" werden. Wie gesagt, eigene Dummheit. Habe preg_match in de Abfrage jetzt negiert, und siehe da es läuft.

              Nun habe ich noch eine weitere Frage, die vielleicht noch zum diesem Beitrag passt. Wenn ein User das Formular ausfüllt(es handelt sich um ein Formular zum ändern der Userangaben), würde ich gerne die Änderungen die richtig sind eintragen, die falschen natürlich nicht. Würdet Ihr für jeden Eintrag ein (1)extra query erstellen, oder eher ein (2)query zusammenfügen ? Bei (2) wäre das Problem mit der Komma Setzung, da es ja eine lange überprüfung wäre, ob noch ein Eintrag folgt, oder eben nicht.

              Ich hoffe Ihr versteht was ich meine...

              Vielen Dank an die freundlichen Helfer hier und allen einen ruhigen Sonntag

              Gruß
              Dynamite

              1. Hallo Dynamite!

                habe das Problem jetzt gelöst. War meine eigene Dummheit.

                Sagte ich doch ;) Naja, Dummheit habe ich Dir nicht unterstellt, sondern irgendein »dummer« Fehler, wie sie mir zuhauf unterlaufen... ;)

                Deine zweite Frage verstehe ich nicht, da sollte ein PHPler mal 'ran.

                Viele Grüße aus Frankfurt/Main,
                Patrick

                --
                _ - jenseits vom delirium - _

                   Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                J'ai 10 ans! | Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
                1. Sagte ich doch ;) Naja, Dummheit habe ich Dir nicht unterstellt, sondern irgendein »dummer« Fehler, wie sie mir zuhauf unterlaufen... ;)

                  Die Dummheit habe ich selber bei mir festgestellt. :-)

                  Ist halt ärgerlich wenn man wegen sowas das Forum strapazieren muss.

                  Danke Euch auf jedenfall allen, für die Unterstützung

                  Gruß
                  Dynamite

              2. echo $begrüßung;

                Wenn ein User das Formular ausfüllt(es handelt sich um ein Formular zum ändern der Userangaben), würde ich gerne die Änderungen die richtig sind eintragen, die falschen natürlich nicht.

                Wie unterscheidest du richtig von falsch? (Vermutlich ist das für die Antwort unwichtig. Es ist nur nicht verständlich, was hier falsch und richtig bedeutet.)

                Würdet Ihr für jeden Eintrag ein (1)extra query erstellen, oder eher ein (2)query zusammenfügen ?

                Eine Datenbankanfrage ist preiswerter als mehrere. Wenn du eine variable Anzahl von Feldern in ein Statement einfügen möchtest, musst du zunächst diese Werte irgendwie sammeln. Als Container-Variable eignet sich ein Array für diese Aufgabe. Anschließend kannst du den Array-Inhalt mit Stringfunktionen für ein SQL-Statement (das ist doch mit query gemeint?) aufbereiten. Ungefähr so:

                $uservalues = array();
                ...
                // ein Beispiel stellvertretend für alle Prüfungen
                if (richtig)
                  $uservalues['feldname'] = 'wert';
                ...
                $sql = sprintf("INSERT INTO tabelle (%s) VALUES ('%s')",
                  implode(', ', array_keys($uservalues)),  // die Feldnamen
                  implode("', '", $uservalues));  // die Werte

                Bei (2) wäre das Problem mit der Komma Setzung, da es ja eine lange überprüfung wäre, ob noch ein Eintrag folgt, oder eben nicht.

                Was für ein Kommasetzungsproblem? Ich seh hier nur eins mit der Getrennt- und Zusammenschreibung (und vermutlich ein vergessenes Shift-Taste-Drücken)

                Ich hoffe Ihr versteht was ich meine...

                Ich für meinen Teil muss deine Hoffnung teilweise enttäuschen.

                echo "$verabschiedung $name";