Ankündigung

Einklappen
Keine Ankündigung bisher.

Forlumar Feld überprüfen (entweder nur Zahlen oder leer)

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Forlumar Feld überprüfen (entweder nur Zahlen oder leer)

    Hi Leute,

    ich möchte in einem Formularfeld (Telefonnummer) entweder nur Zahlen (also ohne - oder / oder so) erlauben oder eben ein leeres Feld.

    Meine Überprüfung für nur Zahlen sieht so aus:
    PHP-Code:
    function check_telefon($telefon){
        return 
    eregi("^[0-9]+$",$telefon);

    Das lüppt auch.

    In der Überprüfung siehts dann so aus:

    PHP-Code:
    if(isset($_POST['action'])){
        switch(
    $_POST['action']){
            case 
    'submit':    
                
                if(!
    check_telefon($_POST['telefon'])){
                    
    $meldungen .= "Bitte geben Sie eine gültige Nummer ein.<br>";
                    
    $error 1;
                } 
    Nun weiß ich aber nicht, wie ich auch ein leeres Feld erlauben kann.

    Habt ihr nen Tipp für mich ?

    Grüße

    Alex


  • #2
    Statt dem Quantifier + einfach den * benutzten, der auch kein Vorkommen der geforderten Zeichen erlaubt ...?

    Btw., die ereg-Funktion sind veraltet, und werden mit PHP 6 entfernt.
    Wenn du reguläre Ausdrücke nutzen willst, verwende die preg-Funktionen.

    Kommentar


    • #3
      Ich habe vor ner Woche sowas schreiben müssen, jedoch für deutsche Handynummern.
      PHP-Code:
      $nummer        =    "0157123456789";

      if( 
      checkNumber($nummer ) ){
          echo 
      "Nummer OK";
          }else{
          echo 
      "Nummer NICHT OK";
          }

      function 
      checkNumber($number){
          
      //trim delete unused signs
          
      $arr1        =    array(" " "-" "/" "&" "," "." ";");
          
      $arr2        =    array(""  ""  ""  ""  ""  ""  "");
          
      $number1    =    str_replace($arr1,$arr2,trim($number));
          
      // check numeric (after str_replace => to avoid decimal)
          
      if(!is_numeric($number1) ){
              return 
      false;
              }
          
      // check length
          
      if( strlen($number1) > 13 || strlen($number1) <  11 ){
              return 
      false;
              }
          
      // check Vorwahl
          
      $uVorwahl    =    substr($number1,0,4);
          
      $vorWahlen    =    array("0151","0160","0170","0171","0175",
                      
      "0152","0162","0172","0173","0174","0157",
                      
      "0163","0177","0178","0159","0176","0179");
          if( !
      in_array($uVorwahl$vorWahlen) ){
              return 
      false;
              }
              
          return 
      true;
          } 

      Kommentar


      • #4
        Cool, seid ihr schnell.

        Das hat gefunzt. Bin halt noch n PHP Anfänger und hab mir schon echt viel durchgelesen, aber ich lerne am besten durch try and error. Nur DARAUF bin ich nun nicht gekommen.

        VIELEN DANK !!!

        Preg ? Wird php6 nicht noch etwas dauern ? Hab ich zumindest gelesen.


        P.S.: Was hat eigentlich das $ am Ende zu bedeuten ? Schlagt mich bitte nicht, aber ich konnte dazu nichts finden...

        Grüße

        Alex

        Kommentar


        • #5
          Wo siehst du ein $ am Ende?

          @halskrause:
          Deutsche Handynummern fangen gerne auch mal mit 0049 oder +49 an.
          Außerdem: Coole Sortierreihenfolge der Vorwahlen. Einfach eufsteigend kann ja jeder
          **********************************
          Nein, ich bin nicht die Signatur.
          Ich putze hier nur.
          **********************************

          Kommentar


          • #6
            @halskrause: Nicht sehr sinnvoll der Code. Oder willst Du Angaben wie
            01.....571&&&&&&/////2-----3,4,5,6,7,8,9
            ernsthaft zulassen?
            --

            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


            --

            Kommentar


            • #7
              Zitat von nikosch Beitrag anzeigen
              @halskrause: Nicht sehr sinnvoll der Code. Oder willst Du Angaben wie
              01.....571&&&&&&/////2-----3,4,5,6,7,8,9
              ernsthaft zulassen?
              In dem Fall, war es mir egal, weil das Formular zwingend mit 01 (JavaScript-Validierung) beginnen musste. Ausserdem war die "01" auch per Value vorgetippt, und unter dem Formular war auch ein Beispiel: 0177123456789.


              Die 0049 wird auch durch JavaScript "gealertet".

              Kommentar


              • #8
                Ja. Nur sagt Javascript überhaupt nichts zur Validierung aus. Und Vorgabewerte genausowenig. Außerdem hat mein Beispiel auch eine führende 01. Und
                und unter dem Formular war auch ein Beispiel: 0177123456789.
                sagt nichts darüber aus, wie Fehleingaben behandelt werden müssen.
                --

                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                --

                Kommentar


                • #9
                  PHP-Code:
                  function check_telefon($telefon){
                      return 
                  eregi("^[0-9]+$",$telefon);

                  @Der_gerhard : Na hier: return eregi("^[0-9]+$",$telefon);

                  Ich habe nach vielen eigenen Versuchen diesen Code gefunden, verstehe ihn allerdings nicht komplett. 0-9 ist klar, dann das "*" (stattdes "+" ist auch klar. Aber das ^ und das $ sind nicht klar.

                  Könnt ihr mir nen Tipp geben ?

                  Kommentar


                  • #10
                    ^ steht für "Zeilenanfang", $ für "Zeilenende" (in diesem Kontext)...
                    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                    Kommentar


                    • #11
                      ereg ist trotzdem veraltet. Und für Deine Lösung wäre ein Prüfungen auf ein Nicht-numerisches Zeichen einfacher (Falsifizierung).
                      --

                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                      --

                      Kommentar


                      • #12
                        Zitat von halskrause Beitrag anzeigen
                        Ich habe vor ner Woche sowas schreiben müssen, jedoch für deutsche Handynummern.
                        PHP-Code:
                        $nummer        =    "0157123456789";

                        if( 
                        checkNumber($nummer ) ){
                            echo 
                        "Nummer OK";
                            }else{
                            echo 
                        "Nummer NICHT OK";
                            }

                        function 
                        checkNumber($number){
                            
                        //trim delete unused signs
                            
                        $arr1        =    array(" " "-" "/" "&" "," "." ";");
                            
                        $arr2        =    array(""  ""  ""  ""  ""  ""  "");
                            
                        $number1    =    str_replace($arr1,$arr2,trim($number));
                            
                        // check numeric (after str_replace => to avoid decimal)
                            
                        if(!is_numeric($number1) ){
                                return 
                        false;
                                }
                            
                        // check length
                            
                        if( strlen($number1) > 13 || strlen($number1) <  11 ){
                                return 
                        false;
                                }
                            
                        // check Vorwahl
                            
                        $uVorwahl    =    substr($number1,0,4);
                            
                        $vorWahlen    =    array("0151","0160","0170","0171","0175",
                                        
                        "0152","0162","0172","0173","0174","0157",
                                        
                        "0163","0177","0178","0159","0176","0179");
                            if( !
                        in_array($uVorwahl$vorWahlen) ){
                                return 
                        false;
                                }
                                
                            return 
                        true;
                            } 
                        Caramba, das nenn ich mal mit chinesischen Kanonen auf Spatzen schießen Pass auf das die dir nicht um die Ohren fliegen *lach*

                        Mal im Ernst, um Telefonnummern zu überprüfen, sollte man sich erstmal mit deren Notation und auch mit deren Speicherung auseinandersetzen. Es gibt dafür Standards, die auch Sonderzeichen erlauben: http://de.wikipedia.org/wiki/Rufnummer#Schreibweisen. Da fallen dann Leerzeichen, Pluszeichen und noch vieles Mehr drunter.
                        Fynder - http://www.fynder.de - Tutorials zum Thema Technik

                        Kommentar


                        • #13
                          Ach so doof find ich das gar nicht. Nur ist, wie gesagt, die Logik falsch.
                          --

                          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                          --

                          Kommentar


                          • #14
                            Okay, ich möchte ja keine sinnlos-Kritik äußern, die keinem Hilft. Anhand der Standards kann man eigentlich relativ genau festlegen, wie die Nummer nachher aussehen sollte, damit sie "korrekt" ist und diese auch validieren.

                            Allerdings sind die meisten User, die ein Formular benutzen, nicht mit diesen Standards vertraut, tippen die Nummer irgendwie ein und wollen möglichst nicht mit irgendwelchen Fehlermeldungen belästigt werden.

                            Im Gegenzug möchte der Seitenbetreiber nicht, dass entweder jemand völligen Mist eingibt und damit durchkommt bzw. jemand sich versehentlich vertippt und dadurch eine falsche Telefonnummer oder eine Telefonnummer mit Sonderzeichen gespeichert wird.

                            Daher ist wohl folgende Vorgehensweise generell für Formularfelder sinnvoll:

                            1.) Man präsentiere dem Benutzer im Formular einen Hinweis, ob es ein Pflichtfeld ist, was er alles eingeben darf und am besten noch ein kleines Beispiel um es zu verdeutlichen.
                            Dabei sollte man den Hinweis ob optional oder nicht davon abhängig machen, von welcher Art es mehr Felder gibt. Wenn mehr Pflichtfelder vorhanden sind, markiert man die optionalen und umgekehrt.

                            Für das Telefonnummerfeld:
                            Telefonnummer (optional): Bitte geben Sie nur Zahlen ein, Sonder- und Leerzeichen werden nicht berücksichtigt. Beispiel: 0123234384756

                            2.) Man sollte nur Zeichen automatisch entfernen, wenn man sicher sein kann, dass sie weg sollen, ansonsten ist eine Hinweismeldung meiner Ansicht nach sinnvoller. Das Erhalten der Originaleingabedaten halte ich für wichtig.

                            3.) Niemand kann verhindern, dass ein Feld mit "unechten" Daten gefüllt wird, es sei denn, man validiert zusätzlich über andere Mechanismen, wie E-Mail-Bestätigung oder Ähnliches.
                            Daher sollte man hier das 80:20 Prinzip anwenden: 20% des Aufwands für ein 80%iges Ergebnis.

                            4.) Für nahezu jede Art von Formularfeldern gibt es bereits reguläre Ausdrücke im Internet, die diese annähernd Standardkonform validieren. Allerdings ist es immer schwer als "Otto Normaluser" ohne fundierte Regexkenntnisse zu bewerten, welche davon brauchbar und welche unbrauchbar sind. Daher mal eine Anregung an die Moderatoren des Wikis:

                            Vielleicht gibt es ja die Möglichkeit, eine Seite für Formulartipps und reguläre Ausdrücke zur Formularvalidierung einzurichten und immer dann zu pflegen, wenn jemand mal wieder so einen Thread startet. Ich stelle dafür auch gerne meine regulären Ausdrücke zur Verfügung. Da ich kein ausgewiesener Experte auf diesem Gebiet bin, natürlich ohne Garantie und Schadensansprüche

                            Aber ich denke wenn ein paar fortgeschrittene User sich etwas Gedanken machen, kann damit vielen "Anfängern" geholfen werden und es kommt ein guter Referenzartikel dabei raus, der für jeden nützlich ist.


                            Btw für die Telefonnummervalidierung:
                            PHP-Code:
                            // Ersetze alle Zeichen, die keine Ziffer sind durch nichts
                            $number preg_replace("/^[^0-9]$/"""$number);
                            // Prüfe die "Vorwahl"
                            return preg_match("/^01(51|52|57|59|60|62|63|7[0-9])[0-9]{7-9}$/"$number);

                            // Mein 80:20-Regex für die Telefonnummern sieht so aus
                            $regex "/^[0-9\/\+\- \(\)]+$/"
                            Fynder - http://www.fynder.de - Tutorials zum Thema Technik

                            Kommentar


                            • #15
                              http://www.php.de/adventskalender-20...-regulaer.html

                              Es muss nicht immer alles über reguläre Ausdrücke gelöst werden. Z.B. würde ich bei der Telefonnummer immer eine Mindestlänge abfragen. Natürlich nach dem Ersetzen der Murx-Zeichen.
                              Vielleicht gibt es ja die Möglichkeit, eine Seite für Formulartipps und reguläre Ausdrücke zur Formularvalidierung einzurichten und immer dann zu pflegen, wenn jemand mal wieder so einen Thread startet. Ich stelle dafür auch gerne meine regulären Ausdrücke zur Verfügung. Da ich kein ausgewiesener Experte auf diesem Gebiet bin, natürlich ohne Garantie und Schadensansprüche
                              Hmm, naja, wir haben obiges und im Wiki Anfänge zur Formularverarbeitung. Ich frage mich, wer jetzt diese Sammlung noch pflegen sollte. Ausser der klassischen E-Mail-Frage sind die wenigsten Ausdrücke sammelnswert, weil zu speziell.
                              --

                              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                              --

                              Kommentar

                              Lädt...
                              X