Utilisation de libphonenumber pour valider les numéros de téléphone

1. Vue d'ensemble

Dans ce rapide tutoriel, nous verrons comment utiliser la bibliothèque open-source de Google libphonenumber pour valider les numéros de téléphone en Java .

2. Dépendance de Maven

Tout d'abord, nous devrons ajouter la dépendance de cette bibliothèque dans notre pom.xml :

 com.googlecode.libphonenumber libphonenumber 8.12.10 

Les dernières informations sur la version sont disponibles sur Maven Central.

Maintenant, nous sommes équipés pour utiliser toutes les fonctionnalités que cette bibliothèque a à offrir.

3. PhoneNumberUtil

La bibliothèque fournit une classe utilitaire, PhoneNumberUtil , qui fournit plusieurs méthodes pour jouer avec les numéros de téléphone.

Voyons quelques exemples de la façon dont nous pouvons utiliser ses différentes API pour la validation.

Surtout, dans tous les exemples, nous utiliserons l'objet singleton de cette classe pour effectuer des appels de méthode :

PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();

3.1. isPossibleNumber

En utilisant P honeNumberUtil # isPossibleNumber , nous pouvons vérifier si un numéro donné est possible pour un code de pays ou une région en particulier.

À titre d'exemple, prenons les États-Unis, qui ont un code de pays de 1. Nous pouvons vérifier si des numéros de téléphone donnés sont des numéros américains possibles de cette manière:

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

Ici, nous avons également utilisé une autre variante de cette fonction en transmettant la région à partir de laquelle nous attendons que le numéro soit composé sous forme de chaîne .

3.2. isPossibleNumberForType

La bibliothèque reconnaît différents types de numéros de téléphone, tels que les numéros de téléphone fixe, mobile, sans frais, la messagerie vocale, la VoIP, le téléavertisseur et bien d'autres.

Sa méthode utilitaire isPossibleNumberForType vérifie si le nombre donné est possible pour un type donné dans une région particulière.

À titre d'exemple, allons-y pour l'Argentine car elle permet différentes longueurs de nombres possibles pour différents types.

Par conséquent, nous pouvons l'utiliser pour démontrer la capacité de cette 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)); }

Comme nous pouvons le voir, le code ci-dessus confirme que l'Argentine autorise les numéros de ligne fixe à 6 chiffres et les numéros de mobile à 11 chiffres.

3.3. isAlphaNumber

Cette méthode est utilisée pour vérifier si le numéro de téléphone donné est un numéro alphanumérique valide, tel que 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")); }

Pour clarifier, un nombre alpha valide contient au moins trois chiffres au début, suivis de trois lettres de l'alphabet ou plus. La méthode utilitaire ci-dessus supprime d'abord l'entrée donnée de tout formatage, puis vérifie cette condition.

3.4. isValidNumber

L'API précédente dont nous avons discuté vérifie rapidement le numéro de téléphone sur la base de sa longueur uniquement. D'autre part, isValidNumber effectue une validation complète en utilisant le préfixe ainsi que les informations de longueur :

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

Ici, le numéro est validé quand on n'a pas précisé de région, et aussi quand on l'a fait.

3.5. isNumberGeographical

Cette méthode vérifie si un nombre donné est associé à une géographie ou à une région:

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

Ici, dans la première assertion ci-dessus, nous avons donné le numéro de téléphone dans un format international avec le code de région, et la méthode a renvoyé true. La deuxième affirmation utilise un numéro local des États-Unis et la troisième un numéro sans frais. Donc l'API a renvoyé false pour ces deux.

4. Conclusion

Dans ce didacticiel, nous avons vu certaines des fonctionnalités offertes par libphonenumber pour formater et valider les numéros de téléphone à l'aide d'exemples de code.

Il s'agit d'une bibliothèque riche qui offre de nombreuses autres fonctions utilitaires et prend en charge la plupart des besoins de nos applications pour le formatage, l'analyse et la validation des numéros de téléphone.

Comme toujours, le code source est disponible à l'adresse over sur GitHub.