henman: Regex Telefonnummern nach DIN 5008

hallo alle,

ich habe einen Regex geschrieben, der Telefonnummern über preg_match nach DIN 5008 hin untersucht. Er findet auch immer die richtige Lösung, allerdings sehen zwei Augen weniger als 2*x, darum würde ich euch bitten, mal drüber zu schauen.

/^(+[0-9]{1,} |0)[1-9]{2,} [0-9]{2,}(-[0-9]{1,}|)$/

Treffer:
+12 345 678-9
+12 345 6789
+1 2345 6789
0123 4567
0123 4567-8

kein Treffer:
+1 2345
1234 56789
1234 567 89
012 3456 789
012 345-
012 345 -6

grüße,
henman

--
"Sir! We are surrounded!" - "Excellent! We can attack in any direction!"
sh:( fo:| ch:? rl:° br:> n4:? ie:% mo:) va:| de:] zu:) fl:{ ss:| ls:[ js:|
  1. Hi!

    /^(+[0-9]{1,} |0)[1-9]{2,} [0-9]{2,}(-[0-9]{1,}|)$/

    {1,} lässt sich als + kürzer notieren. Die Rufnummer 035206 6-0 wird gleich zweimal abgelehnt. Einmal wegen der zweiten 0 in der Vorwahl und wegen der einstelligen Einwahl. (Ja, es gibt große Einrichtungen in kleinen Nestern, die eine einstellige Einwahl haben.) - ist kein Sonderzeichen (außerhalb einer Zeichenklasse) und benötigt keine Maskierung.

    Wie auch bei Email-Adressen: Die formale Korrektheit der Notation garantiert überhaupt nichts. Damit kann die Existenz oder Gültigkeit einer Adressen/Nummern nicht sichergestellt werden.

    kein Treffer:
    +1 2345

    Warum darf dieses Muster nicht treffen? Singapur hat eine Landesvorwahl, aber als Stadtstaat keine Ortsvorwahlen. Die Rufnummer schließt sich gleich an die Landeskennung an.

    1234 56789
    1234 567 89
    012 3456 789

    Und warum darf ich meine Rufnummer nicht zur besseren Lesbarkeit mit Leerzeichen füllen sondern darf sie nur funktional trennen?

    Lo!

    1. hallo dedlfix,

      Und warum darf ich meine Rufnummer nicht zur besseren Lesbarkeit mit Leerzeichen füllen sondern darf sie nur funktional trennen?

      Kunde wills so. Ich schreib aber morgen mal ne Mail und bring das zur Sprache. Ihr habt schon recht, manch ein Nutzer weiß halt nicht, wie die DIN aussieht und is zu faul zum Nachschauen.

      Danke für die Antworten!

      grüße,
      henman

      --
      "Sir! We are surrounded!" - "Excellent! We can attack in any direction!"
      sh:( fo:| ch:? rl:° br:> n4:? ie:% mo:) va:| de:] zu:) fl:{ ss:| ls:[ js:|
  2. Hallo henman,

    ich habe einen Regex geschrieben, der Telefonnummern über preg_match nach DIN 5008 hin untersucht. Er findet auch immer die richtige Lösung, allerdings sehen zwei Augen weniger als 2*x, darum würde ich euch bitten, mal drüber zu schauen.

    /^(+[0-9]{1,} |0)[1-9]{2,} [0-9]{2,}(-[0-9]{1,}|)$/

    ist nicht korrekt.

      
        $subject = '112'; # [link:http://de.wikipedia.org/wiki/Notrufnummer@title=Notrufnummer], selbstverständlich gültig nach DIN 5008  
        $pattern = '/^(\+[0-9]{1,} |0)[1-9]{2,} [0-9]{2,}(\-[0-9]{1,}|)$/';  
        echo preg_match($pattern, $subject);  
        // gibt 0 aus => Fehler  
    
    

    Als Übung ist ein RegExp für DIN 5008 sicher sinnvoll. Für den praktischen Einsatz meiner Meinung nach nicht. Benutzer zwingen zu wollen, Telefonnummern nach einer bestimmten DIN einzugeben, vergrault diese und hilft keinem.

    Was ist mit Vanity-Nummern?

    Freundliche Grüße

    Vinzenz