Utilizzo di libphonenumber per convalidare i numeri di telefono

1. Panoramica

In questo rapido tutorial, vedremo come utilizzare la libreria open source di Google libphonenumber per convalidare i numeri di telefono in Java .

2. Dipendenza da Maven

Per prima cosa, dovremo aggiungere la dipendenza per questa libreria nel nostro pom.xml :

 com.googlecode.libphonenumber libphonenumber 8.12.10 

Le informazioni sulla versione più recente possono essere trovate su Maven Central.

Ora siamo attrezzati per utilizzare tutte le funzionalità che questa libreria ha da offrire.

3. PhoneNumberUtil

La libreria fornisce una classe di utilità, PhoneNumberUtil , che fornisce diversi metodi per giocare con i numeri di telefono.

Vediamo alcuni esempi di come possiamo utilizzare le sue varie API per la convalida.

È importante sottolineare che, in tutti gli esempi, utilizzeremo l'oggetto singleton di questa classe per effettuare chiamate ai metodi :

PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();

3.1. isPossibleNumber

Usando P honeNumberUtil # isPossibleNumber , possiamo verificare se un dato numero è possibile per un particolare codice paese o regione.

Ad esempio, prendiamo gli Stati Uniti, che hanno un prefisso internazionale pari a 1. Possiamo verificare se i numeri di telefono forniti sono possibili numeri statunitensi in questo modo:

@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")); }

Qui, abbiamo utilizzato anche un'altra variante di questa funzione passando la regione da cui ci aspettiamo che il numero venga composto come stringa .

3.2. isPossibleNumberForType

La libreria riconosce diversi tipi di numeri di telefono, come linea fissa, cellulare, numero verde, posta vocale, VoIP, cercapersone e molti altri.

Il suo metodo di utilità isPossibleNumberForType controlla se il numero specificato è possibile per un dato tipo in una particolare regione.

Ad esempio, andiamo per l'Argentina poiché consente diverse lunghezze possibili di numeri per diversi tipi.

Quindi, possiamo usarlo per dimostrare la capacità di questa API:

@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)); }

Come possiamo vedere, il codice sopra conferma che l'Argentina consente numeri di linea fissa a 6 cifre e numeri di cellulare a 11 cifre.

3.3. isAlphaNumber

Questo metodo viene utilizzato per verificare se il numero di telefono fornito è un numero alfanumerico valido, ad esempio 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")); }

Per chiarire, un numero alfa valido contiene almeno tre cifre all'inizio, seguite da tre o più lettere dell'alfabeto. Il metodo di utilità sopra prima rimuove l'input fornito da qualsiasi formattazione e quindi controlla questa condizione.

3.4. isValidNumber

L'API precedente di cui abbiamo discusso controlla rapidamente il numero di telefono solo in base alla sua lunghezza. D'altra parte, isValidNumber esegue una convalida completa utilizzando sia il prefisso che le informazioni sulla lunghezza :

@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"))); }

Qui, il numero viene convalidato quando non abbiamo specificato una regione e anche quando l'abbiamo fatto.

3.5. isNumberGeographical

Questo metodo controlla se a un dato numero è associata un'area geografica o una regione:

@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)); }

Qui, nella prima affermazione sopra, abbiamo fornito il numero di telefono in un formato internazionale con il codice regionale e il metodo ha restituito true. La seconda asserzione utilizza un numero locale degli Stati Uniti e la terza un numero verde. Quindi l'API ha restituito false per questi due.

4. Conclusione

In questo tutorial, abbiamo visto alcune delle funzionalità offerte da libphonenumber per formattare e convalidare i numeri di telefono utilizzando esempi di codice.

Si tratta di una ricca libreria che offre molte più funzioni di utilità e si prende cura della maggior parte delle esigenze dell'applicazione per la formattazione, l'analisi e la convalida dei numeri di telefono.

Come sempre, il codice sorgente è disponibile su GitHub.