Ich würde auch vorschlagen, die Google-Bibliothek " libphonenumber " zu besuchen . Ich weiß, es ist kein Regex, aber es macht genau das, was Sie wollen.
Zum Beispiel wird es erkennen, dass:
15555555555
ist eine mögliche Nummer, aber keine gültige Nummer. Es unterstützt auch Länder außerhalb der USA.
Highlights der Funktionalität:
- Analysieren / Formatieren / Validieren von Telefonnummern für alle Länder / Regionen der Welt.
getNumberType
- erhält den Typ der Nummer basierend auf der Nummer selbst; Festnetz-, Mobil-, gebührenfreie, Premium-Tarif-, Shared Cost-, VoIP- und persönliche Nummern (wann immer möglich) können unterschieden werden.
isNumberMatch
- erhält ein Konfidenzniveau, ob zwei Zahlen gleich sein könnten.
getExampleNumber
/ getExampleNumberByType
- bietet gültige Beispielnummern für alle Länder / Regionen mit der Option, anzugeben, welche Art von Beispieltelefonnummer benötigt wird.
isPossibleNumber
- schnell erraten, ob eine Nummer eine mögliche Telefonnummer ist, indem nur die Längeninformationen verwendet werden, viel schneller als eine vollständige Validierung.
isValidNumber
- vollständige Validierung einer Telefonnummer für eine Region anhand von Längen- und Präfixinformationen.
AsYouTypeFormatter
- Formatiert Telefonnummern im laufenden Betrieb, wenn Benutzer jede Ziffer eingeben.
findNumbers
- findet Zahlen in der Texteingabe.
PhoneNumberOfflineGeocoder
- liefert geografische Informationen zu einer Telefonnummer.
Beispiele
Das größte Problem bei der Validierung von Telefonnummern ist, dass sie sehr kulturell abhängig sind.
- Amerika
(408) 974–2042
ist eine gültige US-Nummer
(999) 974–2042
ist keine gültige US-Nummer
- Australien
0404 999 999
ist eine gültige australische Nummer
(02) 9999 9999
ist auch eine gültige australische Nummer
(09) 9999 9999
ist keine gültige australische Nummer
Ein regulärer Ausdruck ist in Ordnung, um das Format einer Telefonnummer zu überprüfen, aber er kann die Gültigkeit einer Telefonnummer nicht wirklich überprüfen .
Ich würde vorschlagen, einen einfachen regulären Ausdruck zu überspringen, um Ihre Telefonnummer zu testen, und eine Bibliothek wie die von Google zu verwenden libphonenumber
(Link zum GitHub-Projekt) .
Libphonenumber vorstellen!
Anhand eines Ihrer komplexeren Beispiele erhalten 1-234-567-8901 x1234
Sie die folgenden Daten aus libphonenumber
(Link zur Online-Demo) :
Validation Results
Result from isPossibleNumber() true
Result from isValidNumber() true
Formatting Results:
E164 format +12345678901
Original format (234) 567-8901 ext. 123
National format (234) 567-8901 ext. 123
International format +1 234-567-8901 ext. 123
Out-of-country format from US 1 (234) 567-8901 ext. 123
Out-of-country format from CH 00 1 234-567-8901 ext. 123
Sie erfahren also nicht nur, ob die Telefonnummer gültig ist (was sie ist), sondern Sie erhalten auch eine konsistente Telefonnummernformatierung in Ihrem Gebietsschema.
Als Bonus libphonenumber
gibt es eine Reihe von Datensätzen, mit denen auch die Gültigkeit von Telefonnummern überprüft werden kann. Wenn Sie also eine Nummer wie +61299999999
(die internationale Version von (02) 9999 9999
) überprüfen, wird diese als gültige Nummer mit Formatierung zurückgegeben:
Validation Results
Result from isPossibleNumber() true
Result from isValidNumber() true
Formatting Results
E164 format +61299999999
Original format 61 2 9999 9999
National format (02) 9999 9999
International format +61 2 9999 9999
Out-of-country format from US 011 61 2 9999 9999
Out-of-country format from CH 00 61 2 9999 9999
libphonenumber bietet Ihnen außerdem viele zusätzliche Vorteile, z. B. das Abrufen des Standorts, an dem die Telefonnummer erkannt wurde, und das Abrufen der Zeitzoneninformationen von der Telefonnummer:
PhoneNumberOfflineGeocoder Results
Location Australia
PhoneNumberToTimeZonesMapper Results
Time zone(s) [Australia/Sydney]
Die ungültige australische Telefonnummer ( (09) 9999 9999
) gibt jedoch zurück, dass es sich nicht um eine gültige Telefonnummer handelt.
Validation Results
Result from isPossibleNumber() true
Result from isValidNumber() false
Die Google-Version enthält Code für Java und Javascript. Es wurden jedoch auch Bibliotheken für andere Sprachen implementiert, die den Google i18n-Telefonnummern-Datensatz verwenden:
Sofern Sie nicht sicher sind, dass Sie immer Nummern aus einem Gebietsschema akzeptieren und diese immer in einem Format vorliegen, würde ich dringend empfehlen, keinen eigenen Code dafür zu schreiben und libphonenumber zum Überprüfen und Anzeigen von Telefonnummern zu verwenden.