Ich würde auch vorschlagen, dass Sie sich die " libphon-Nummer " Google Bibliothek. Ich weiß, es ist nicht Regex, aber es tut genau das, was Sie wollen.
Zum Beispiel wird es das erkennen:
15555555555
ist eine mögliche Zahl, aber keine gültige Zahl. Es werden auch Länder außerhalb der USA unterstützt.
Highlights der Funktionalität:
- Parsing/Formatierung/Validierung von Telefonnummern für alle Länder/Regionen der Welt.
getNumberType
- erhält den Typ der Nummer anhand der Nummer selbst; kann zwischen Festnetz-, Mobilfunk-, gebührenfreien, Premium Rate-, Shared Cost-, VoIP- und persönlichen Nummern unterscheiden (sofern möglich).
isNumberMatch
- liefert eine Aussage darüber, ob zwei Zahlen gleich sein könnten.
getExampleNumber
/ getExampleNumberByType
- bietet gültige Beispielnummern für alle Länder/Regionen, wobei Sie angeben können, welche Art von Beispieltelefonnummer benötigt wird.
isPossibleNumber
- schnelles Erraten, ob es sich bei einer Nummer um eine mögliche Phonennummer handelt, indem nur die Längeninformation verwendet wird, viel schneller als eine vollständige Validierung.
isValidNumber
- vollständige Validierung einer Telefonnummer für eine Region anhand von Längen- und Vorwahlinformationen.
AsYouTypeFormatter
- formatiert Telefonnummern on-the-fly, wenn der Benutzer die einzelnen Ziffern eingibt.
findNumbers
- findet Zahlen in Texteingaben.
PhoneNumberOfflineGeocoder
- liefert geografische Informationen zu einer Telefonnummer.
Beispiele
Das größte Problem bei der Validierung von Telefonnummern ist, dass sie sehr kulturabhängig ist.
- Amerika
(408) 974–2042
ist eine gültig US-Nummer
(999) 974–2042
ist nicht gültig US-Nummer
- Australien
0404 999 999
ist eine gültig Australische Nummer
(02) 9999 9999
ist auch ein gültig Australische Nummer
(09) 9999 9999
ist nicht gültig Australische Nummer
Ein regulärer Ausdruck ist gut geeignet, um das Format einer Telefonnummer zu überprüfen, aber er ist nicht wirklich in der Lage, die Gültigkeit einer Rufnummer.
Ich würde vorschlagen, einen einfachen regulären Ausdruck zum Testen Ihrer Telefonnummer zu überspringen und eine Bibliothek wie die von Google zu verwenden libphonenumber
(Link zum GitHub-Projekt) .
Wir stellen vor: libphonenumber!
Anhand eines Ihrer komplexeren Beispiele, 1-234-567-8901 x1234
erhalten 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
So erfahren Sie nicht nur, ob die Telefonnummer gültig ist (was der Fall ist), sondern Sie erhalten auch eine einheitliche Formatierung der Telefonnummer in Ihrem Land.
Als Bonus, libphonenumber
verfügt auch über eine Reihe von Datensätzen zur Überprüfung der Gültigkeit von Telefonnummern, so dass die Überprüfung einer Nummer wie +61299999999
(die internationale Version von (02) 9999 9999
) als gültige Zahl mit Formatierung zurück:
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 darüber hinaus viele weitere Vorteile, wie z. B. die Erfassung des Standorts, an dem die Telefonnummer erkannt wird, und die Abfrage der Zeitzone:
PhoneNumberOfflineGeocoder Results
Location Australia
PhoneNumberToTimeZonesMapper Results
Time zone(s) [Australia/Sydney]
Aber die ungültige australische Rufnummer ( (09) 9999 9999
) gibt zurück, dass es sich nicht um eine gültige Telefonnummer handelt.
Validation Results
Result from isPossibleNumber() true
Result from isValidNumber() false
Die Version von Google enthält Code für Java und Javascript, aber es wurden auch Bibliotheken für andere Sprachen implementiert, die den Google i18n-Telefonnummern-Datensatz verwenden:
Wenn Sie nicht sicher sind, dass Sie immer nur 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 für die Validierung und Anzeige von Telefonnummern zu verwenden.