Brug af libphonenumber til at validere telefonnumre

1. Oversigt

I denne hurtige vejledning ser vi, hvordan du bruger Googles open source-bibliotek libphonenumber for at validere telefonnumre i Java.

2. Maven-afhængighed

Først skal vi tilføje afhængigheden af ​​dette bibliotek i vores pom.xml:

 com.googlecode.libphonenumber libphonenumber 8.12.10 

De seneste versionoplysninger findes på Maven Central.

Nu er vi udstyret til at bruge al den funktionalitet, dette bibliotek har at tilbyde.

3. PhoneNumberUtil

Biblioteket tilbyder en hjælpeklasse, PhoneNumberUtil, som giver flere metoder til at lege med telefonnumre.

Lad os se et par eksempler på, hvordan vi kan bruge dets forskellige API'er til validering.

Det er vigtigt, at vi i alle eksempler bruger singleton-objektet i denne klasse til at foretage metodeopkald:

PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance ();

3.1. isPossibleNumber

Ved brug af PhoneNumberUtil # isPossibleNumber, kan vi kontrollere, om et givet nummer er muligt for en bestemt landekode eller region.

Lad os som et eksempel tage USA, der har en landekode på 1. Vi kan kontrollere, om givne telefonnumre er mulige amerikanske numre på denne måde:

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

Her, vi brugte også en anden variant af denne funktion ved at passere i regionen at vi forventer, at nummeret skal ringes op som en Snor.

3.2. isPossibleNumberForType

Biblioteket genkender forskellige typer telefonnumre, såsom fastnet, mobil, gratis, telefonsvarer, VoIP, personsøger og mange flere.

Dens anvendelsesmetode isPossibleNumberForType kontrollerer, om det givne nummer er muligt for en given type i en bestemt region.

Lad os som et eksempel gå til Argentina, da det giver mulighed for forskellige mulige længder af tal for forskellige typer.

Derfor kan vi bruge det til at demonstrere muligheden for denne API:

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

Som vi kan se, validerer ovenstående kode, at Argentina tillader 6-cifrede fastlinjenumre og 11-cifrede mobilnumre.

3.3. erAlphaNumber

Denne metode bruges til at kontrollere, om det givne telefonnummer er et gyldigt alfanumerisk nummer, f.eks 325-BILER:

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

For at afklare indeholder et gyldigt alfanumer mindst tre cifre i starten efterfulgt af tre eller flere alfabetbogstaver. Værktøjsmetoden ovenfor fjerner først det givne input fra enhver formatering og kontrollerer derefter for denne tilstand.

3.4. isValidNumber

Den tidligere API, vi diskuterede, kontrollerer hurtigt telefonnummeret kun på baggrund af dets længde. På den anden side, isValidNumber udfører en komplet validering ved hjælp af præfiks samt længdeoplysninger:

@Test offentlig ugyldighed givenPhoneNumber_whenValid_thenOK () kaster undtagelse {PhoneNumber phone = phoneNumberUtil.parse ("+ 911234567890", CountryCodeSource.UNSPECIFIED.name ()); assertTrue (phoneNumberUtil.isValidNumber (telefon)); assertTrue (phoneNumberUtil.isValidNumberForRegion (telefon, "IN")); assertFalse (phoneNumberUtil.isValidNumberForRegion (telefon, "US")); assertTrue (phoneNumberUtil.isValidNumber (phoneNumberUtil.getExampleNumber ("IN"))); }

Her valideres nummeret, når vi ikke angav en region, og også når vi gjorde det.

3.5. isNumberGeographical

Denne metode kontrollerer, om et givet nummer har geografi eller region tilknyttet:

@Test offentligt ugyldigt givetPhoneNumber_whenNumberGeographical_thenValid () kaster NumberParseException {PhoneNumber phone = phoneNumberUtil.parse ("+ 911234567890", "IN"); assertTrue (phoneNumberUtil.isNumberGeographical (telefon)); telefon = nyt telefonnummer (). setCountryCode (1). setNationalNumber (2530000L); assertFalse (phoneNumberUtil.isNumberGeographical (telefon)); telefon = nyt telefonnummer (). setCountryCode (800). setNationalNumber (12345678L); assertFalse (phoneNumberUtil.isNumberGeographical (telefon)); }

Her, i den første påstand ovenfor, gav vi telefonnummeret i et internationalt format med regionskoden, og metoden vendte tilbage som sand. Den anden erklæring bruger et lokalt nummer fra USA, og det tredje et gratis nummer. Så API returnerede falsk for disse to.

4. Konklusion

I denne vejledning så vi nogle af de funktioner, der tilbydes af libphonenumber til at formatere og validere telefonnumre ved hjælp af kodeeksempler.

Dette er et rigt bibliotek, der tilbyder mange flere hjælpefunktioner og tager sig af de fleste af vores applikationsbehov til formatering, parsing og validering af telefonnumre.

Som altid er kildekoden tilgængelig på GitHub.