I'm versuchen, zusammen eine umfassende Regex Telefonnummern zu validieren. Idealerweise würde es internationale Formate behandeln, aber es muss US-Formate, einschließlich der folgenden behandeln:
Ich werde mit meinem aktuellen Versuch antworten, aber ich hoffe, dass jemand etwas Besseres und/oder Eleganteres hat.
Es hat sich herausgestellt, dass es dafür eine Art Spezifikation gibt, zumindest für Nordamerika, die NANP.
Sie müssen genau angeben, was Sie wollen. Was sind zulässige Begrenzungszeichen? Leerzeichen, Bindestriche und Punkte? Ist kein Begrenzungszeichen erlaubt? Kann man Begrenzungszeichen mischen (z. B. +0.111-222.3333)? Wie werden Erweiterungen (z. B. 111-222-3333 x 44444) gehandhabt? Was ist mit Sonderrufnummern, wie 911? Wird die Ortsvorwahl optional oder obligatorisch sein?
Hier ist eine Regex für eine 7- oder 10-stellige Nummer, wobei Erweiterungen erlaubt sind und die Trennzeichen Leerzeichen, Bindestriche oder Punkte sind:
^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$
Haben Sie schon einen Blick auf RegExLib geworfen?
Die Eingabe der US-Telefonnummer brachte eine ganze Liste von Möglichkeiten zurück.
Hier's mein bester Versuch bis jetzt. Es behandelt die oben genannten Formate, aber ich bin sicher, ich vermisse einige andere mögliche Formate.
^\d?(?:(?:[\+]?(?:[\d]{1,3}(?:[ ]+|[\-.])))?[(]?(?:[\d]{3})[\-/)]?(?:[ ]+)?)?(?:[a-zA-Z2-9][a-zA-Z0-9 \-.]{6,})(?:(?:[ ]+|[xX]|(i:ext[\.]?)){1,2}(?:[\d]{1,5}))?$