Menggunakan libphonenumber untuk Memvalidasi Nomor Telepon

1. Ikhtisar

Dalam tutorial singkat ini, kita akan melihat bagaimana menggunakan libphonenumber perpustakaan open-source Google untuk memvalidasi nomor telepon di Java .

2. Ketergantungan Maven

Pertama, kita perlu menambahkan ketergantungan untuk pustaka ini di pom.xml kita :

 com.googlecode.libphonenumber libphonenumber 8.12.10 

Informasi versi terbaru dapat ditemukan di Maven Central.

Sekarang, kami diperlengkapi untuk menggunakan semua fungsionalitas yang ditawarkan perpustakaan ini.

3. PhoneNumberUtil

Pustaka menyediakan kelas utilitas, PhoneNumberUtil , yang menyediakan beberapa metode untuk bermain-main dengan nomor telepon.

Mari kita lihat beberapa contoh bagaimana kita dapat menggunakan berbagai API-nya untuk validasi.

Yang penting, dalam semua contoh, kita akan menggunakan objek tunggal kelas ini untuk melakukan panggilan metode :

PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();

3.1. isPossibleNumber

Dengan menggunakan P honeNumberUtil # isPossibleNumber , kita dapat memeriksa apakah suatu nomor memungkinkan untuk kode negara atau wilayah tertentu.

Sebagai contoh, mari kita ambil Amerika Serikat, yang memiliki kode negara 1. Kita dapat memeriksa apakah nomor telepon yang diberikan adalah kemungkinan nomor AS dengan cara ini:

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

Di sini, kami menggunakan varian lain dari fungsi ini juga dengan meneruskan di wilayah yang kami harapkan nomornya akan dipanggil sebagai String .

3.2. isPossibleNumberForType

Perpustakaan mengenali berbagai jenis nomor telepon, seperti saluran tetap, seluler, bebas pulsa, pesan suara, VoIP, pager, dan banyak lagi.

Metode utilitasnya isPossibleNumberForType memeriksa apakah nomor yang diberikan memungkinkan untuk jenis tertentu di wilayah tertentu.

Sebagai contoh, mari kita pergi untuk Argentina karena memungkinkan kemungkinan panjang angka yang berbeda untuk jenis yang berbeda.

Karenanya, kami dapat menggunakannya untuk mendemonstrasikan kemampuan API ini:

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

Seperti yang kita lihat, kode di atas memvalidasi bahwa Argentina mengizinkan 6 digit nomor telepon tetap dan 11 digit nomor ponsel.

3.3. isAlphaNumber

Metode ini digunakan untuk memverifikasi apakah nomor telepon yang diberikan adalah alfanumerik yang valid, seperti 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")); }

Untuk memperjelas, nomor alfa yang valid berisi setidaknya tiga digit di awal, diikuti oleh tiga atau lebih huruf alfabet. Metode utilitas di atas pertama-tama menghapus masukan yang diberikan dari pemformatan apa pun, lalu memeriksa kondisi ini.

3.4. isValidNumber

API sebelumnya yang kita diskusikan dengan cepat memeriksa nomor telepon hanya berdasarkan panjangnya. Di sisi lain, isValidNumber melakukan validasi lengkap menggunakan awalan serta informasi panjang :

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

Di sini, nomor tersebut divalidasi saat kami tidak menentukan wilayah, dan juga saat kami melakukannya.

3.5. isNumberGeographical

Metode ini memeriksa apakah suatu nomor memiliki geografi atau wilayah yang terkait dengannya:

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

Di sini, pada pernyataan pertama di atas, kami memberikan nomor telepon dalam format internasional dengan kode wilayah, dan metode mengembalikan true. Penegasan kedua menggunakan nomor lokal dari AS, dan yang ketiga adalah nomor bebas pulsa. Jadi API mengembalikan false untuk keduanya.

4. Kesimpulan

Dalam tutorial ini, kami melihat beberapa fungsi yang ditawarkan oleh libphonenumber untuk memformat dan memvalidasi nomor telepon menggunakan contoh kode.

Ini adalah pustaka yang kaya yang menawarkan lebih banyak fungsi utilitas dan menangani sebagian besar kebutuhan aplikasi kita untuk pemformatan, penguraian, dan validasi nomor telepon.

Seperti biasa, kode sumber tersedia di GitHub.