Libphonenumber gebruiken om telefoonnummers te valideren

1. Overzicht

In deze korte tutorial zullen we zien hoe u Google's open-sourcebibliotheek libphonenumber om telefoonnummers in Java te valideren.

2. Maven Afhankelijkheid

Eerst moeten we de afhankelijkheid voor deze bibliotheek toevoegen aan ons pom.xml:

 com.googlecode.libphonenumber libphonenumber 8.12.10 

De laatste versie-informatie is te vinden op Maven Central.

Nu zijn we uitgerust om alle functionaliteit te gebruiken die deze bibliotheek te bieden heeft.

3. PhoneNumberUtil

De bibliotheek biedt een hulpprogramma-klasse, PhoneNumberUtil, die verschillende methoden biedt om met telefoonnummers te spelen.

Laten we een paar voorbeelden bekijken van hoe we de verschillende API's kunnen gebruiken voor validatie.

Belangrijk is dat we in alle voorbeelden het singleton-object van deze klasse gebruiken om methodeaanroepen te doen:

PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance ();

3.1. isPossibleNumber

Gebruik makend van P.honeNumberUtil # isPossibleNumberkunnen we controleren of een bepaald nummer mogelijk is voor een bepaalde landcode of regio.

Laten we als voorbeeld de Verenigde Staten nemen, die de landcode 1 heeft. We kunnen op deze manier controleren of bepaalde telefoonnummers Amerikaanse nummers zijn:

@Test openbare ongeldig gegevenPhoneNumber_whenPossible_thenValid () {PhoneNumber nummer = nieuw PhoneNumber (); number.setCountryCode (1) .setNationalNumber (123000L); assertFalse (phoneNumberUtil.isPossibleNumber (nummer)); assertFalse (phoneNumberUtil.isPossibleNumber ("+ 1343253 00000", "US")); assertFalse (phoneNumberUtil.isPossibleNumber ("(343) 253-00000", "US")); assertFalse (phoneNumberUtil.isPossibleNumber ("dial p for pizza", "US")); assertFalse (phoneNumberUtil.isPossibleNumber ("123-000", "US")); }

Hier, we gebruikten ook een andere variant van deze functie door in de regio te passeren waarvan we verwachten dat het nummer wordt gebeld als een Draad.

3.2. isPossibleNumberForType

De bibliotheek herkent verschillende soorten telefoonnummers, zoals vaste lijn, mobiel, gratis, voicemail, VoIP, semafoon en nog veel meer.

De gebruiksmethode isPossibleNumberForType controleert of het opgegeven nummer mogelijk is voor een bepaald type in een bepaalde regio.

Laten we als voorbeeld gaan voor Argentinië, omdat het verschillende mogelijke lengtes van nummers toestaat voor verschillende typen.

Daarom kunnen we het gebruiken om de mogelijkheden van deze API te demonstreren:

@Test openbare ongeldig gegevenPhoneNumber_whenPossibleForType_thenValid () {PhoneNumber nummer = nieuw 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)); }

Zoals we kunnen zien, valideert de bovenstaande code dat Argentinië 6-cijferige vaste nummers en 11-cijferige mobiele nummers toestaat.

3.3. isAlphaNumber

Deze methode wordt gebruikt om te controleren of het opgegeven telefoonnummer een geldig alfanumeriek nummer is, zoals 325-AUTO'S:

@Test openbare ongeldig gegevenPhoneNumber_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")); }

Ter verduidelijking: een geldig alfanummer bevat aan het begin minstens drie cijfers, gevolgd door drie of meer letters uit het alfabet. De bovenstaande hulpprogramma-methode verwijdert eerst de opgegeven invoer van elke opmaak en controleert vervolgens op deze voorwaarde.

3.4. isValidNumber

De vorige API die we bespraken, controleert snel het telefoonnummer alleen op basis van de lengte. Aan de andere kant, isValidNumber voert een volledige validatie uit met zowel prefix als lengte-informatie:

@Test openbare leegte gegevenPhoneNumber_whenValid_thenOK () gooit uitzondering {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 wordt het nummer gevalideerd wanneer we geen regio hebben gespecificeerd, en ook wanneer we dat wel deden.

3.5. isNumberGeographical

Deze methode controleert of aan een bepaald nummer een geografische locatie of een regio is gekoppeld:

@Test openbare leegte gegevenPhoneNumber_whenNumberGeographical_thenValid () gooit NumberParseException {PhoneNumber phone = phoneNumberUtil.parse ("+ 911234567890", "IN"); assertTrue (phoneNumberUtil.isNumberGeographical (phone)); phone = nieuw PhoneNumber (). setCountryCode (1) .setNationalNumber (2530000L); assertFalse (phoneNumberUtil.isNumberGeographical (phone)); phone = nieuw PhoneNumber (). setCountryCode (800) .setNationalNumber (12345678L); assertFalse (phoneNumberUtil.isNumberGeographical (phone)); }

Hier, in de eerste bewering hierboven, gaven we het telefoonnummer in een internationaal formaat met de regiocode, en de methode retourneerde true. De tweede bewering gebruikt een lokaal nummer uit de VS en de derde een gratis nummer. Dus de API retourneerde false voor deze twee.

4. Conclusie

In deze zelfstudie hebben we een deel van de functionaliteit gezien die wordt aangeboden door libphonenumber om telefoonnummers op te maken en te valideren met behulp van codevoorbeelden.

Dit is een rijke bibliotheek die veel meer hulpprogramma-functies biedt en zorgt voor de meeste van onze applicatiebehoeften voor het formatteren, parseren en valideren van telefoonnummers.

Zoals altijd is de broncode beschikbaar op GitHub.