miomiomio: HTML-Pattern: Telefonnummer soll mit +49 beginnen müssen!

Hallo : ) ich bin ein absoluter Neuling..

habe mich eine Weile versucht in diese Pattern-Geschichte einzulesen, aber ich komme nicht so richtig auf einen Grünen Zweig...

Wie kann ich erzwingen, dass eine Formular-Telefonnummern-Angabe zwingend mit +49 beginnt? irgendwie pattern="+49", aber wie füge ich dann noch an, dass noch mehr mindestens 5 Zahlen folgen sollen?

Vielen Dank!

akzeptierte Antworten

  1. <input type="text" name="tel" pattern="\+49[0-9]{5,99}" title="tel">

    1. Hi,

      <input type="text" name="tel" pattern="\+49[0-9]{5,99}" title="tel">

      hab den Backslash verdoppelt, sonst wird er vom Forum geschluckt.

      cu,
      Andreas a/k/a MudGuard

      1. @@MudGuard

        hab den Backslash verdoppelt

        Ich hab ihn wieder vereinfacht.

        sonst wird er vom Forum geschluckt.

        Nicht, wenn man’s richtig macht. 😜

        LLAP 🖖

        --
        „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
        1. @@MudGuard

          hab den Backslash verdoppelt

          Ich hab ihn wieder vereinfacht.

          Danke an euch zwei 😀

          sonst wird er vom Forum geschluckt.

          Nicht, wenn man’s richtig macht. 😜

          Wie kann ich quoten, dass das nicht passiert?

          Vielen Dank, schöne Grüße

          1. Hallo

            Wie kann ich quoten, dass das nicht passiert?

            Im konkreten Fall war die Lösung, das Beispiel als Code auszuzeichnen. Innerhalb eines Codeabschnitts werden keine Zeichen mit Sonderbedeutung (hier der Backslash \) geparst.

            Ganz allgemein ist die Hilfe zur Formatierung von Postings über den Button mit dem Fragezeichen, der sich links, oberhalb des Eingabefelds findet, erreichbar. Zudem ist unerhalb des Eingabefelds die Vorschau des Postings sichtbar. Etwaige Fehler sollten schon dort sichtbar sein.

            Tschö, Auge

            --
            Eine Kerze stand [auf dem Abort] bereit, und der Almanach des vergangenen Jahres hing an einer Schnur. Die Herausgeber kannten ihre Leser und druckten den Almanach auf weiches, dünnes Papier.
            Kleine freie Männer von Terry Pratchett
    2. @@andaris

      <input type="text" name="tel" pattern="\+49[0-9]{5,99}" title="tel">

      Das ging jetzt aber an „Energie des Verstehens“ vorbei.

      Und wieso 99?

      LLAP 🖖

      --
      „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
      1. @@andaris

        Das ging jetzt aber an „Energie des Verstehens“ vorbei.

        😂

        Und wieso 99?

        Ist vermutlich etwas übertrieben, kA wie lange deutsche Telefonnummern sein dürfen. Generell gebe ich bei Regex gerne eine Obergrenze vor, um formell gültige aber im weiteren Verlauf problematische Eingaben abzufangen.

        1. Tach!

          Ist vermutlich etwas übertrieben, kA wie lange deutsche Telefonnummern sein dürfen. Generell gebe ich bei Regex gerne eine Obergrenze vor, um formell gültige aber im weiteren Verlauf problematische Eingaben abzufangen.

          Generell geht man bei Telefonnummern von einer Maximallänge von 22 Ziffern aus. Keine Ahnung, wo ich mal dieses Wissen herhabe. E.164 geht jedenfalls von maximal 15 Ziffern aus. Da fehlen aber auch noch Verkehrsausscheidungsziffern (sprich die Nullen, inklusive Rauswahl-0 für Telefonanlagen, und ähnliches), weil E.164 immer mit der Landeskennzahl beginnt.

          dedlfix.

  2. @@miomiomio

    Wie kann ich erzwingen, dass eine Formular-Telefonnummern-Angabe zwingend mit +49 beginnt?

    Warum sollen Nutzer mit bspw. österreichischer Telefonnummer ausgeschlossen werden? Auch wenn sie in Deutschland leben?

    irgendwie pattern="+49"

    Das pattern-Attribut hat einen regulären Ausdruck als Wert. Diese sind bspw. auch im SELFHTML-Wiki erklärt.

    Unter Quantifizierer (quantifier) siehst du, dass + ein Sonderzeichen ist; in der Bedeutung als Pluszeichen also escapet werden muss.

    aber wie füge ich dann noch an, dass noch mehr mindestens 5 Zahlen folgen sollen?

    Auch das im Abschnitt Quantifizierer (quantifier).

    LLAP 🖖

    --
    „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
    1. Warum sollen Nutzer mit bspw. österreichischer Telefonnummer ausgeschlossen werden? Auch wenn sie in Deutschland leben?

      Kennst du das Projekt?

      Angenommen, ich kandidiere als deutsche Bundeskanzlerin und möchte ein Wähler-Verzeichnis erstellen, was soll ich dann mit Österreichern?

      Und telefoniere im Ausland mal mit deinem Handy nach Hause, wenn die Landesvorwahl fehlt ...

      Linuchs

      1. @@Linuchs

        Warum sollen Nutzer mit bspw. österreichischer Telefonnummer ausgeschlossen werden? Auch wenn sie in Deutschland leben?

        Kennst du das Projekt?

        Muss ich das?

        Angenommen, ich kandidiere als deutsche Bundeskanzlerin und möchte ein Wähler-Verzeichnis erstellen, was soll ich dann mit Österreichern?

        Dich vergewissern, dass die nicht wieder einen Gegenkandidaten zu uns schicken.

        Angenommen, du bist Deutscher, arbeitest aber in Österreich und hast deshalb eine österreichische Telefonnummer. Willst du wirklich ausgeschlossen werden?

        Um zur Ausgangsfrage zurückzukommen: ich kann mir kein Projekt vorstellen, wo die Einschränkung auf ausschließlich deutsche Telefonnummern sinnvoll wäre.

        Und telefoniere im Ausland mal mit deinem Handy nach Hause, wenn die Landesvorwahl fehlt ...

        In meinem Adressbuch stehen sämtliche Telefonnummern mit + und Landesvorwahl beginnend; da fehlt nie eine Landesvorwahl, wenn ich im Ausland bin.

        LLAP 🖖

        --
        „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
        1. hallo

          In meinem Adressbuch stehen sämtliche Telefonnummern mit + und Landesvorwahl beginnend; da fehlt nie eine Landesvorwahl, wenn ich im Ausland bin.

          Es gibt übrigens auch Schweizer Telefonnummern, die mit +49 beginnen 😉

          --
          Neu im Forum! Signaturen kann man ausblenden!
  3. Hallo miomiomio,

    Wie kann ich erzwingen, dass eine Formular-Telefonnummern-Angabe zwingend mit +49 beginnt? irgendwie pattern="+49", aber wie füge ich dann noch an, dass noch mehr mindestens 5 Zahlen folgen sollen?

    0049 ist ebenso gültig. Außerdem ist es beliebt Telefonnummern zu strukturieren, etwa durch Slashes oder Leerzeichen. Ich würde das ohne das Pattern-Attribut machen.

    Vielleicht so:

    Geben Sie eine Telefonnummer aus Deutschland an:

    +49 _________________

    Als Validierung würde ich alle nicht Ziffern und führende +49 oder 0049 entfernen. Falls dann immer noch eine Null vornean steht, würde ich die auch entfernen und das Ergebnis dem User wieder mit der Bitte um Kontrolle vorlegen.

    Bis demnächst
    Matthias

    --
    Rosen sind rot.
    1. @@Matthias Apsel

      irgendwie pattern="+49", aber wie füge ich dann noch an, dass noch mehr mindestens 5 Zahlen folgen sollen?

      0049 ist ebenso gültig.

      Nicht wirklich. 00 ist die internationale VAZ in Deutschland und etlichen anderen Ländern, aber nicht überall.

      LLAP 🖖

      --
      „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
  4. Hej miomiomio,

    Wie kann ich erzwingen, dass eine Formular-Telefonnummern-Angabe zwingend mit +49 beginnt?

    Warum sollen Benutzerinnen das tun? - Lass sie doch einfach Ihre Nummer wie gewohnt eintippen und ergänze die +49, wenn du das (für was auch immer - muss ich das verstehen?) unbedingt davor haben willst.

    Marc

    PS: ich komme einfach nicht drauf, wofür das gut sein könnte…

    1. @@marctrix

      Wie kann ich erzwingen, dass eine Formular-Telefonnummern-Angabe zwingend mit +49 beginnt?

      Warum sollen Benutzerinnen das tun? - Lass sie doch einfach Ihre Nummer wie gewohnt eintippen

      Gute Frage. Man könnte erlauben, deutsche Telefonnummern mit 0 statt +49 beginnend einzugeben. Damit hätten deutsche Telefonnummern eine Sonderstellung gegenüber anderen – was je nach Zielgruppe auch berechtigt sein kann.

      und ergänze die +49

      Dabei nicht vergessen, die führende 0 zu entfernen. (Und vor allem diese unsägliche (0) bei +49 (0).)

      wenn du das (für was auch immer - muss ich das verstehen?) unbedingt davor haben willst.

      PS: ich komme einfach nicht drauf, wofür das gut sein könnte…

      Es kann nicht schaden, Telefonnummern in seinen Datenbeständen einheitlich zu notieren, d.h. zu normalisieren, also bspw. (089) 32 16 8 zu +49 89 32168.

      Es ist sinnvoll, bei der Normalisierung das FQTN-Format zu verwenden.

      LLAP 🖖

      --
      „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
      1. Hi,

        Es kann nicht schaden, Telefonnummern in seinen Datenbeständen einheitlich zu notieren, d.h. zu normalisieren, also bspw. (089) 32 16 8 zu +49 89 32168.

        I believe I spider (murphy): Konjunktur die ganze Nacht!!!

        cu,
        Andreas a/k/a MudGuard

        1. Hej MudGuard,

          Hi,

          Es kann nicht schaden, Telefonnummern in seinen Datenbeständen einheitlich zu notieren, d.h. zu normalisieren, also bspw. (089) 32 16 8 zu +49 89 32168.

          I believe I spider (murphy): Konjunktur die ganze Nacht!!!

          Telefonnummer 32168 😉

          Marc

          1. Es kann nicht schaden, Telefonnummern in seinen Datenbeständen einheitlich zu notieren, d.h. zu normalisieren, also bspw. (089) 32 16 8 zu +49 89 32168.

            Ich mache mir manchmal einen Spaß daraus, Telefon- und Kontonummern "richtig" zu sprechen: Vierhundertachtundneunzigmillionenneunhundertzweiunddreißigtausendeinhundertachtundsechzig.

            Aber Steno ist da schon ganz praktisch ;-)

            1. Hej Linuchs,

              Ich mache mir manchmal einen Spaß daraus, Telefon- und Kontonummern "richtig" zu sprechen: Vierhundertachtundneunzigmillionenneunhundertzweiunddreißigtausendeinhundertachtundsechzig.

              Willkommen in der Welt der Screenreader…

              Marc

      2. Hej Gunnar,

        PS: ich komme einfach nicht drauf, wofür das gut sein könnte…

        Es kann nicht schaden, Telefonnummern in seinen Datenbeständen einheitlich zu notieren, d.h. zu normalisieren, also bspw. (089) 32 16 8 zu +49 89 32168.

        Es ist sinnvoll, bei der Normalisierung das FQTN-Format zu verwenden.

        Auf jeden Fall!

        Ich weiß nur nicht, warum die Besucher etwas manuell erledigen sollen, was sich automatisieren lässt.

        Vielleicht ist das eine Seite für HartzIV-Empfänger. Kann ja sein, dass auch die ABMs jetzt digitalisiert werden: Tippen Sie mal die folgenden 10.000 Nummern in folgendem Format ab. Dann leeren wir die DB und Sie fangen wieder von vorne an.

        Habe also doch einen „sinnvollen“ Einsatzzweck ausfindig gemacht.

        Komm ich getz in Fernsehn? 😂

        Marc

        1. Liebe Community,

          ich danke euch vielmals für eure Hilfestellung!

          Da war ich mit meiner Lösung ja nicht allzuweit vom Ziel entfernt.. Könnt ihr mit erklären wozu der /vor der +49 notwendig ist?

          Jetzt war ich zu vorschnell, die Lösung funktioniert bei mir nicht.. aktuell wird jegliche Eingabe als invalid eingestuft.. <input name="tel" type="text" required="required" placeholder="Telefonnummer" pattern="/+49[0-9]{5,20}" title="tel"/>

          Auch interessant zu lesen, was ihr so für Ideen und Meinungen zur Beschränkung auf deutsche Handynummern habt. Das Formular ist lediglich für Übungs-/Uni-Zwecke... ich kann euch also keine Begründung liefern : )

          Seid ihr zufällig auch php-kundig und könnt mir die selbe Validierung bei php erklären?

          Vielen Dank nochmal & lg

          1. Habe den Fehler gefunden, das Slash gehört wohl andersherum .. *schäm

          2. Hallo

            Könnt ihr mit erklären wozu der /vor der +49 notwendig ist?

            Der ist zu nichts. Andererseits wäre, wie schon erklärt wurde, en Backslash „\“ notwendig, weil das „+“ in regulären Ausdrücken eine andere Bedeutung als das Zeichen an sich hat.

            Jetzt war ich zu vorschnell, die Lösung funktioniert bei mir nicht.. aktuell wird jegliche Eingabe als invalid eingestuft.. <input name="tel" type="text" required="required" placeholder="Telefonnummer" pattern="/+49[0-9]{5,20}" title="tel"/>

            Ja, wegen des Slashs statt des Backslashs.

            Tschö, Auge

            --
            Eine Kerze stand [auf dem Abort] bereit, und der Almanach des vergangenen Jahres hing an einer Schnur. Die Herausgeber kannten ihre Leser und druckten den Almanach auf weiches, dünnes Papier.
            Kleine freie Männer von Terry Pratchett
          3. Hallo miomiomio,

            Seid ihr zufällig auch php-kundig und könnt mir die selbe Validierung bei php erklären?

            Interessant, dass das hier wohl offensichtlich nicht bekannt ist. Ob wohl viele Besucher denken, dass wäre nur HTML und CSS hier?

            Du kannst Regex natürlich genauso mit PHP verarbeiten, zb. preg_match.

            Grundsätzlich zu empfehlen ist jedoch Stringfunktionen zu nutzen, wenn möglich. Daher hier mal in dieser Form. Sieht umfangreich aus, ist es aber nicht, die Ausführlichkeit soll nur die Vorgehensweise verständiger machen.

            <?php
            // äöü utf8save
            
            
            $tel1 = ' +491234567';
            
            $tel2 = '+441234567';
            
            $tel3 = '00491234567';
            
            $tel4 = ' +49 123 4567';
            
            
            
            
            
            // Die Abfrage könnte aber auch scheitern, weil Leerzeichen drin sind, also erst mal alle entfernen:
            $tel1 = str_replace(' ','',$tel1);
            
            
            
            
            if(strpos($tel1,'+49') === 0)
            {
            echo 'Ja, am Anfang vorhanden, Position: '.strpos($tel1,'+49');
            
            // Nur wenn diese Voraussetzung erfüllt wurde gehts hier weiter:
            
            // Dazu das plus (+) mal kurz raushalten, also +49123 wird zu 49123 und dern Rest auf Ziffern prüfen.
            
            If( ctype_digit(substr($tel1,1))){echo 'Ja, besteht nur aus Ziffern';}else{echo 'Nein, gemischter Inhalt';}
            
            
            }
            elseif(strpos($tel1,'+49')){echo 'Nein, zwar vorhanden aber an Postition: '.strpos($tel1,'+49');}
            else{echo 'Nein, nicht vorhanden'.strpos($tel1,'+49');}
            
            
            
            
            
            
            // Jetzt das Ganze mal als  Funktion und Längenbegrenzung:
            // Die echoausgaben dienen hier nur der Verdeutlichung, und können auch entfernt/ersetzt werden)
            
            function chk_telpre($tel, $pre ='+49', $minl = 5, $maxl = 20)
            {
            // Leerzeichen entfernen
            $tel = str_replace(' ','',$tel);
            
            // Wie lang ist die ganze Nummer und drei abziehen für prefix
            $l = strlen($tel)-3;
            
            // jetzt prüfen 
            if($l < $minl || $l > $maxl ){echo 'Länge der Nummer ungültig';return false;}
            
            
            // Jetzt schauen, ob prefix richtig ist (beachte !== anstatt != *boolsche operator/identisch)
            if(strpos($tel,$pre) !== 0){echo $pre.' ist nicht am Anfang (Position 0)vorhanden'; return false;}
            
            
            
            // Jetzt prüfen ob der Rest Ziffern sind
            If( !ctype_digit(substr($tel,1))){echo 'Gemischter Inhalt nicht nur Ziffern';return false;}
            
            // Hier landest du erst wenn alles richtig ist, also kannst du jetzt ausführen was du möchtest:
            
            echo '<h1>Telefonnnummer wurde verifiziert</h1>';
            
            // Rückgabe = gesäuberte telnummer
            return $tel;
            
            } // end of func.
            
            
            
            // Beispiele:
            chk_telpre($tel1);
            chk_telpre($tel2);
            chk_telpre($tel3);
            chk_telpre($tel4);
            
            
            
            
            // Praxisnahes Beispiel: (kompaktere Funktion und schnelle flexible Anwendung)
            
            function chk_telpre_2($tel, $pre ='+49', $minl = 5, $maxl = 20)
            {
            // Leerzeichen entfernen
            $tel = str_replace(' ','',$tel);
            
            // Wie lang ist die ganze Nummer und drei abziehen für prefix
            $l = strlen($tel)-3;
            
            // jetzt prüfen 
            if($l < $minl || $l > $maxl ){return false;}
            
            // Jetzt schauen, ob prefix richtig ist (beachte !== anstatt != *boolsche operator/identisch)
            if(strpos($tel,$pre) !== 0){return false;}
            
            // Jetzt prüfen ob der Rest Ziffern sind
            If( !ctype_digit(substr($tel,1))){return false;}
            
            // Rückgabe = gesäuberte telnummer
            return $tel;
            
            } // end of func.
            
            
            
            $x = chk_telpre_2($tel1,'+49',3,10);
            If($x){ echo 'Nummer ist OK: '.$x; } else{ echo '!!! Nummer nicht OK: '.$x;}
            
            echo'<hr>';
            
            $x = chk_telpre_2($tel2,'+49',3,10);
            If($x){ echo 'Nummer ist OK: '.$x; } else{ echo '!!! Nummer nicht OK: '.$tel2;}
            
            
            
            
            
            ?>
            

            Gruss
            Henry

            1. @@Henry

              $tel1 = ' +491234567';
              
              $tel2 = '+441234567';
              
              $tel3 = '00491234567';
              
              $tel4 = ' +49 123 4567';
              

              Und da ich mir Zahlen nicht merken kann, gibt’s das als Vanity-Nummer:

              $tel0 = ' +49-1-BEI-LOS';
              

              Die Validierung sollte das berücksichtigen.

              LLAP 🖖

              --
              „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
              1. Hallo Gunnar,

                Und da ich mir Zahlen nicht merken kann, gibt’s das als Vanity-Nummer:

                $tel0 = ' +49-1-BEI-LOS';
                

                Die Validierung sollte das berücksichtigen.

                Nö, so eine Nummer würde ich nie akzeptieren. Frage mich auch ob input type="tel" das akzeptieren würde(gleich mal testen).

                Gruss
                Henry

                1. hallo

                  $tel0 = ' +49-1-BEI-LOS';
                  

                  @Gunnar Da sind wir aber nîcht mehr im Bereich der Telefon- Nummern.

                  --
                  Neu im Forum! Signaturen kann man ausblenden!
                  1. Hei Henry, vielen Dank für eine umfrangreiche Ausführung!! soweit funktioniert jetzt bei mir alles - danke euch!!

                    Was hat es denn mit diesem "BEI-LOS" auf sich??

                    Nun habe ich eine abschließende Frage, kann dafür aber auch einen neuen Thread öffnen; wenn gewünscht?

                    Für die php-Validation, gehe ich auf eine extra Seite. Falls nun etwas nicht gepasst hat, schicke ich den Besucher wieder zurück zum Formular: wie erreiche ich, dass seine vorher eingegebenen Daten, noch/wieder in den Feldern stehen?

                    MfG

                    1. Tach!

                      Was hat es denn mit diesem "BEI-LOS" auf sich??

                      Auf Telefontastaturen stehen oftmals auch Buchstaben unter/neben den Ziffern. Bei solchen Wörter-"Nummern" sucht man sich den entsprechenden Buchstaben und drückt die Taste.

                      Falls nun etwas nicht gepasst hat, schicke ich den Besucher wieder zurück zum Formular: wie erreiche ich, dass seine vorher eingegebenen Daten, noch/wieder in den Feldern stehen?

                      Andersrum ist es besser. Nicht weiterschicken und bei Fehlern wieder zurück, sondern erst dann weiterschicken, wenn alles stimmt. Und solange nicht alles stimmt, kommt die Affenformulartechnik zum Einsatz. Das Formular linkt auf sich selbst und kann sich und die Eingaben dann auch wieder ausgeben.

                      dedlfix.

                      1. Wie implementiere ich denn das - Also dass mein php erst ausgeführt wird, wenn "abgeschickt" wird?

                        und wie lasse ich die Fehlermeldung anzeigen, wenn etwas nicht passt?

                        1. Tach!

                          Wie implementiere ich denn das -

                          Suche nach dem Stichwort Affenformular.

                          dedlfix.

                          1. Danke! Guter Hinweis, auch wenn ich keine wirkliche Anleitung für Laien gefunden habe.. so konnte ich doch irgendwie das Prinzip implementieren.

                            Habe natürlich noch 2-3 Probleme, jaja…

                            zu denen später/morgen.

                            Vielen Dank bis hierher, nocheinmal!

                      2. @@dedlfix

                        Was hat es denn mit diesem "BEI-LOS" auf sich??

                        Wikipedia: Buchstabenwahl

                        Auf Telefontastaturen stehen oftmals auch Buchstaben unter/neben den Ziffern. Bei solchen Wörter-"Nummern" sucht man sich den entsprechenden Buchstaben und drückt die Taste.

                        Das gab’s auch schon vor den Tasten:

                        Wählscheibe mit Zahlen und Buchstaben beschriftet

                        (Foto: R Sull. Dhscommtech, CC-BY-SA 3.0)

                        LLAP 🖖

                        --
                        „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
                2. Hallo Henry,

                  Und da ich mir Zahlen nicht merken kann, gibt’s das als Vanity-Nummer:

                  $tel0 = ' +49-1-BEI-LOS';
                  

                  Die Validierung sollte das berücksichtigen.

                  Nö, so eine Nummer würde ich nie akzeptieren. Frage mich auch ob input type="tel" das akzeptieren würde(gleich mal testen).

                  Das tut es. Habe ich letztens mal recherchiert, weil jemand deswegen der Meinung war, dass der Firefox diesen Typ nicht beherrschen würde...

                  Unlike the URL and E-mail types, the Telephone type does not enforce a particular syntax. This is intentional; in practice, telephone number fields tend to be free-form fields, because there are a wide variety of valid phone numbers.

                  Gruß
                  Julius