Verwenden der libphonenumber zum Überprüfen von Telefonnummern

1. Übersicht

In diesem kurzen Tutorial erfahren Sie , wie Sie die Open-Source-Bibliothek libphonenumber von Google verwenden , um Telefonnummern in Java zu überprüfen .

2. Maven-Abhängigkeit

Zuerst müssen wir die Abhängigkeit für diese Bibliothek in unserer pom.xml hinzufügen :

 com.googlecode.libphonenumber libphonenumber 8.12.10 

Die neuesten Versionsinformationen finden Sie in Maven Central.

Jetzt können wir alle Funktionen dieser Bibliothek nutzen.

3. PhoneNumberUtil

Die Bibliothek bietet eine Dienstprogrammklasse, PhoneNumberUtil , die verschiedene Methoden zum Herumspielen mit Telefonnummern bietet.

Schauen wir uns einige Beispiele an, wie wir die verschiedenen APIs zur Validierung verwenden können.

Wichtig ist, dass wir in allen Beispielen das Singleton-Objekt dieser Klasse verwenden, um Methodenaufrufe durchzuführen :

PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();

3.1. isPossibleNumber

Mit P honeNumberUtil # isPossibleNumber können wir prüfen, ob eine bestimmte Nummer für einen bestimmten Ländercode oder eine bestimmte Region möglich ist.

Nehmen wir als Beispiel die Vereinigten Staaten mit der Landesvorwahl 1. Wir können auf folgende Weise prüfen, ob bestimmte Telefonnummern mögliche US-Nummern sind:

@Test public void givenPhoneNumber_whenPossible_thenValid() { PhoneNumber number = new PhoneNumber(); number.setCountryCode(1).setNationalNumber(123000L); assertFalse(phoneNumberUtil.isPossibleNumber(number)); assertFalse(phoneNumberUtil.isPossibleNumber("+1 343 253 00000", "US")); assertFalse(phoneNumberUtil.isPossibleNumber("(343) 253-00000", "US")); assertFalse(phoneNumberUtil.isPossibleNumber("dial p for pizza", "US")); assertFalse(phoneNumberUtil.isPossibleNumber("123-000", "US")); }

Hier haben wir eine weitere Variante dieser Funktion als auch durch in der Region vorbei , dass wir die Zahl erwar zu wählende aus als String .

3.2. isPossibleNumberForType

Die Bibliothek erkennt verschiedene Arten von Telefonnummern, z. B. Festnetz, Mobiltelefon, gebührenfrei, Voicemail, VoIP, Pager und viele mehr.

Die Dienstprogrammmethode isPossibleNumberForType prüft, ob die angegebene Nummer für einen bestimmten Typ in einer bestimmten Region möglich ist.

Nehmen wir als Beispiel Argentinien, da es unterschiedliche mögliche Längen von Zahlen für verschiedene Typen zulässt.

Daher können wir es verwenden, um die Leistungsfähigkeit dieser API zu demonstrieren:

@Test public void givenPhoneNumber_whenPossibleForType_thenValid() { PhoneNumber number = new PhoneNumber(); number.setCountryCode(54); number.setNationalNumber(123456); assertTrue(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.FIXED_LINE)); assertFalse(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.TOLL_FREE)); number.setNationalNumber(12345678901L); assertFalse(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.FIXED_LINE)); assertTrue(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.MOBILE)); assertFalse(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.TOLL_FREE)); }

Wie wir sehen können, bestätigt der obige Code, dass Argentinien 6-stellige Festnetznummern und 11-stellige Handynummern zulässt.

3.3. isAlphaNumber

Diese Methode wird verwendet, um zu überprüfen, ob die angegebene Telefonnummer eine gültige alphanumerische Nummer ist, z. B. 325-CARS :

@Test public void givenPhoneNumber_whenAlphaNumber_thenValid() { assertTrue(phoneNumberUtil.isAlphaNumber("325-CARS")); assertTrue(phoneNumberUtil.isAlphaNumber("0800 REPAIR")); assertTrue(phoneNumberUtil.isAlphaNumber("1-800-MY-APPLE")); assertTrue(phoneNumberUtil.isAlphaNumber("1-800-MY-APPLE..")); assertFalse(phoneNumberUtil.isAlphaNumber("+876 1234-1234")); }

Zur Verdeutlichung enthält eine gültige Alpha-Zahl am Anfang mindestens drei Ziffern, gefolgt von drei oder mehr Buchstaben. Die oben beschriebene Dienstprogrammmethode entfernt zuerst die angegebene Eingabe von jeglicher Formatierung und prüft dann, ob diese Bedingung erfüllt ist.

3.4. isValidNumber

Die zuvor diskutierte API überprüft die Telefonnummer schnell nur anhand ihrer Länge. Auf der anderen Seite führt isValidNumber eine vollständige Validierung unter Verwendung von Präfix- und Längeninformationen durch :

@Test public void givenPhoneNumber_whenValid_thenOK() throws Exception { PhoneNumber phone = phoneNumberUtil.parse("+911234567890", CountryCodeSource.UNSPECIFIED.name()); assertTrue(phoneNumberUtil.isValidNumber(phone)); assertTrue(phoneNumberUtil.isValidNumberForRegion(phone, "IN")); assertFalse(phoneNumberUtil.isValidNumberForRegion(phone, "US")); assertTrue(phoneNumberUtil.isValidNumber(phoneNumberUtil.getExampleNumber("IN"))); }

Hier wird die Nummer validiert, wenn wir keine Region angegeben haben und auch wenn wir dies getan haben.

3.5. isNumberGeographical

Diese Methode prüft, ob einer bestimmten Nummer eine Geografie oder Region zugeordnet ist:

@Test public void givenPhoneNumber_whenNumberGeographical_thenValid() throws NumberParseException { PhoneNumber phone = phoneNumberUtil.parse("+911234567890", "IN"); assertTrue(phoneNumberUtil.isNumberGeographical(phone)); phone = new PhoneNumber().setCountryCode(1).setNationalNumber(2530000L); assertFalse(phoneNumberUtil.isNumberGeographical(phone)); phone = new PhoneNumber().setCountryCode(800).setNationalNumber(12345678L); assertFalse(phoneNumberUtil.isNumberGeographical(phone)); }

Hier haben wir in der ersten Behauptung oben die Telefonnummer in einem internationalen Format mit dem Regionalcode angegeben, und die Methode hat true zurückgegeben. Die zweite Behauptung verwendet eine lokale Nummer aus den USA und die dritte eine gebührenfreie Nummer. Daher gab die API für diese beiden Werte false zurück.

4. Fazit

In diesem Tutorial haben wir einige der von libphonenumber angebotenen Funktionen zum Formatieren und Validieren von Telefonnummern anhand von Codebeispielen gesehen.

Dies ist eine umfangreiche Bibliothek, die viel mehr Dienstprogrammfunktionen bietet und die meisten unserer Anwendungsanforderungen zum Formatieren, Parsen und Überprüfen von Telefonnummern erfüllt.

Wie immer ist der Quellcode über GitHub verfügbar.