[ Input Pattern ]

Formularfelder validieren

Input Pattern Beispiele

 Telefon

Eine Telefonnummer ist zwar normalerweis nur eine Zahl, aber sie folgt natürlich einigen Regeln. Um eine Rufnummer im Ausland zu erreichen wird meist entweder eine Doppelnull oder als Platzhalter ein + Zeichen vorangestellt. Wie im Land die Nummer verteilt werden wird durch Nationale Regeln bestimmt. Ist z.B. in Deutschland eine Mobilnummer schon an der Vorwahl erkennbar, muss das in anderen Länder nicht zwingend so sein.
Auch die Schreibweise ist unterschiedlich.

Mobilfunk Vorwahlnummern (DE)

Laut Wikipedia (Stand 09.2014) gelten für Deutschlad folgende Mobilfunk Vorwahlnummern: 0151x, 0152x, 0157x, 0159x, 0160, 0162, 0163, 0170, 0171, 0172, 0173, 0174, 0175, 0176, 0177, 0178, 0179.

  1. Die 015xx ist 5stellig die 016und 017 sind jeweils 4stellig. Allen gemeinsam ist also die führende '01'. (Muster="01")
  2. Es folgt eine 5, 6 oder 7, wir brauchen also das Pipe Zeichen und müssen die Gruppe zusammenfasssen. (Muster="01(5|6|7)"
  3. Nach einer 5 folgt eine Ziffer 1, 2, 7, 9, hier nutzen wir die Auswahl-Klammer (Muster="01(5[1279]|6|7)"
  4. dahinter kommt eine beliebige Ziffer, hier können wir das vordefinierte Zeichen \d verwenden.(Muster="01(5[1279]\d|6|7)"
  5. Nach einer 6 folgt eine Ziffer 0, 2 und 3. Auch hier nutzen wir die Auswahl-Klammer.(Muster="01(5[1279]\d|6[023]|7)"
  6. Nach einer 7 folgt eine Ziffer 0-9. Das vordefinierte Zeichen kennen wir schon. (Muster="01(5[1279]\d|6[023]|7\d)"

Deutsche Mobil-Vorwahlnummer Format: [015nn, 016n, 017n ]
pattern="01(5[1279]\d|6[023]|7\d)"

01512
01579
0160
0162
0174
0151
01566
0164
01741
0714


Internationale Vorwahlen

Speziell internationale Vorwahlen fictive: +88 Format: (0088), 0088, (+88) ,+88 (fictive: +88, Ortsvorw. ohne 0!)
pattern="((\+88|\(\+88\)|\(0088\)|0088) ?)"

Speziell internationale Vorwahlen fictive: +88 Format: (0088), 0088, (+88) ,+88 oder 0 (fictive: +88, Ortsvorw. mit 0!)
pattern="(((\+88|\(\+88\)|\(0088\)|0088) ?)|0)"

+11
(+11)
0011
(0011)
-11
(+22)
011
0011)

Allgemein internationale Vorwahlen Format: 001nnn, +1nnn, 00Nnn, +Nnn, (001nnn), (+1nnn), (00Nnn), (+Nnn)
pattern="((\+|00)1[1-9]\d{2}|\((\+|00)1[1-9]\d{2}\))|((\+|00)[2-9]\d{1,2}|\((\+|00)[2-9]\d{1,2}\))"

001123
+1123
(00212)
+312
0049
002123
+185
(00212
0712
+3128


Internationale Telefonnummern

Französische Telefonnummer Format: 0033 n nnnn nnnn oder [+33 n nnnn nnnn] oder [0n nnnn nnnn]
pattern="(0|\+33|\(\+33\)|\(\0033\)|0033) ?[1-79]([\.\- ]?\d\d){4}"

+33912341234
0033 9 1234 1234
0912341234
+33812341234
339123412342
0812341234

USA Format: (001)(2nn-nnn-nnnn) - (+1)(9nn-nnn-nnnn)
pattern="((00|\+)1-)?[2-9]\d{2}-\d{3}-\d{4}"

Spanish phone number Format: (+34) 9 nnnn nnnn oder 00348nnnnnnnn (Ortsvorw. ohne 0!)
pattern="((\+34|\(\+34\)|\(0034\)|0034) ?)?[89]( ?\d{4}){2}"

0034812341234
(+34)8 1234 1234
0812341234
(+34 )7 1234 1234

UK Phone Number Format: (+44)1n nnnnnn, 02n nnnnnn
pattern="(((\+44|\(\+44\)|\(0044\)|0044) ?)|0)(1[1-9]|2[03489])\d{6}"

004423123456
+44 23123456
023123456
+44023123456
+44 10123456
032123456

Niederlande Format: +31 nnn nnnnnn, 0031 nn nnnnnnn, 0nnn nnnnnn
pattern="(((\+31|0031) ?)|0)((?=.{9}$)[1-9]\d{1,2}\d{6,7}|(?=.{10}$)[1-9]\d{1,2} \d{6,7})"

+31 123123456
+31 12 1234567
0031 123 123456
0123 123456
0 123123456
+45 123 123456
031 123 123456


Warum funktioniert das nicht?

Einige Beispiele die ich im Netz gefunden habe sind entweder zu sehr vereinfacht, zu kompliziert oder schlichtweg falsch. Einige sind offenbar nie überprüft worden. Die fehlerhaften Beispiele eignen sich gut um das System richtig zu verstehen.

Telefonvorwahlen North America: USA, Canada, etc. Format: nnn-nnn-nnnn
pattern="\D*([2-9]\d{2})(\D*)([2-9]\d{2})(\D*)(\d{4})\D*">

Meine Meinung: Das große \D* bedeutet ein Zeichen, das keine Ziffer ist. Wiso sollten bei einer Telefonnummer Buchstaben und Sonderzeichen erlaubt sein? Es kommt bei diesem Beispiel aber 4 mal vor! In Verbindung mit dem Stern sogar beliebig oft. Nordamerikanische Vorwahlen sind immer gleich lang und bestehen aus drei Ziffern, die erste davon im Bereich 2 bis 9. Warum hier so viele Klammern (..)benutzt werden erschliest sich mir nicht. Es werden ja auch keine Verweise genutzt Die zweite Gruppe (?) an Zahlen wird auf den Zifferraum 2-9 eingeschränkt. Das gibt die Vorschrift aber nicht her. Wenn man eine richtige Nummer eingibt wird tatsächlich positiv entschieden, leider aber auch bei falschen Eingaben. Also dieses Muster funktioniert definitiv nicht, ist sachlich falsch und ist offensichtlich nie getestet worden.

Telefonnummer Frankreich
pattern="^(?:0|\(?\+33\)? ?|0033 ?)[1-79](?:[\.\- ]?\d\d){4}$"
Die Begrenzer ^ ... $ brauchen wir nicht. Es wird immer der gesamte Ausdruck verglichen. Eine Verweis auf einen Klammerinhalt kann durch die eingeschossene Angabe von ?: verhindert werden. Ein Verweis wie z.B. \1 ist aber hier gar nicht angegeben. Die runden Klammern sind hier \(?\+33\)? maskiert, sollen also Teil des Musters sein. Die Fragezeichen stehen hier für 'kann aber muss nicht' und könnten Fehler verursachen, weil man so auch die vordere oder hintere Klammer allein eingeben könnte.

Telefonnummer (+99(99)9999-9999)
pattern="[\+]\d{2}[\(]\d{2}[\)]\d{4}[\-]\d{4}"
Die eckigen Klammern [..] stehen für eine Auswahl, da wir hier nur jeweils eine Option haben brauchen wir die Klammern nicht. Der alleinstehende Bindestrich muß hier nicht maskiert werden, die runden Klammern schon. \+\d{2}\(\d{2}\)\d{4}-\d{4}.

UK Phone Number
pattern="^\s*\(?(020[7,8]{1}\)?[ ]?[1-9]{1}[0-9{2}[ ]?[0-9]{4})|(0[1-8]{1}[0-9]{3}\)?[ ]?[1-9]{1}[0-9]{2}[ ]?[0-9]{3})\s*$"
Die Begrenzer ^..$ gibt es bei Inputfeldern nicht. Mehrere Leerräume (Leerzeichen, tabs, ..) \s am Anfang und am Ende? Wozu soll das gut sein? Die Auswahl [7,8] beinhaltet die 7, die 8 und ein Komma, das wir besser weglassen. Die Anzahl {1} muß nicht geschrieben werden. [ ] 1 Leerzeichen in einer Auswahlliste, wir sparen uns die Klammern. Es gibt eine eckige schliesende Klammer ] zuwenig. 0-9 besser mit den vordefinierten Zeichen \dschreiben. Die öffnende und schliesende Klammern (? ...)? einzeln zur disposition zu stellen ist gefährlich, und auch hier fehlt einmal die maskierung ...(0...\). Auch hier: dieses Muster funktioniert definitiv nicht, ist total falsch und ist offensichtlich nie getestet worden.

USA Phone Number
pattern="\d{3}[\-]\d{3}[\-]\d{4}"
Die eckigen Klammern [..] stehen für eine Auswahlliste, da wir nur jeweils eine Option haben, brauchen wir die Klammern nicht. Der alleinstehende Bindestrich muß nicht maskiert werden.

Dutch Phone Number
pattern="/^((\+|00)?[1-9]{2}|0)[1-9]( ?[0-9]){8}$/"
Die Javascript-Begrenzer / vorn und hinten blockieren die Validierung. Und auch hier: .. ist offensichtlich nie getestet worden. Input-pattern haben keine Begrenzer ^...$. Die Vorwahl +31 von NL kommt im Muster gar nicht vor. Die Position des optionalen Leerzeichens ist sehr ungewöhnlich.