Validasi Nomor Telepon Dengan Java Regex

1. Ikhtisar

Terkadang, kami perlu memvalidasi teks untuk memastikan bahwa isinya sesuai dengan beberapa format. Dalam tutorial singkat ini, kita akan melihat cara memvalidasi berbagai format nomor telepon menggunakan ekspresi reguler.

2. Ekspresi Reguler untuk Memvalidasi Nomor Telepon

2.1. Angka Sepuluh Digit

Mari kita mulai dengan ekspresi sederhana yang akan memeriksa apakah nomor tersebut memiliki sepuluh digit dan tidak ada yang lain :

@Test public void whenMatchesTenDigitsNumber_thenCorrect() { Pattern pattern = Pattern.compile("^\\d{10}$"); Matcher matcher = pattern.matcher("2055550125"); assertTrue(matcher.matches()); }

Ekspresi ini akan mengizinkan angka seperti 2055550125 .

2.2. Angka Dengan Spasi Putih, Titik atau Tanda Hubung

Pada contoh kedua, mari kita lihat bagaimana kita dapat mengizinkan spasi kosong, titik, atau tanda hubung (-) di antara angka:

@Test public void whenMatchesTenDigitsNumberWhitespacesDotHyphen_thenCorrect() { Pattern pattern = Pattern.compile("^(\\d{3}[- .]?){2}\\d{4}$"); Matcher matcher = pattern.matcher("202 555 0125"); assertTrue(matcher.matches()); }

Untuk mencapai tujuan tambahan ini (spasi atau tanda hubung opsional), kami telah menambahkan karakter:

  • [-.]?

Pola ini akan mengizinkan angka seperti 2055550125 , 202 555 0125 , 202.555.0125 , dan 202-555-0125 .

2.3. Nomor Dengan Tanda Kurung

Selanjutnya, mari tambahkan kemungkinan untuk memiliki bagian pertama dari telepon kita di antara tanda kurung :

@Test public void whenMatchesTenDigitsNumberParenthesis_thenCorrect() { Pattern pattern = Pattern.compile"^((\\(\\d{3}\\))|\\d{3})[- .]?\\d{3}[- .]?\\d{4}$"); Matcher matcher = pattern.matcher("(202) 555-0125"); assertTrue(matcher.matches()); }

Untuk mengizinkan tanda kurung opsional dalam angka, kami telah menambahkan karakter berikut ke ekspresi reguler kami:

  • (\\ (\\ d {3} \\)) | \\ d {3})

Ekspresi ini akan mengizinkan angka seperti (202) 5550125 , (202) 555-0125, atau (202) -555-0125 . Selain itu, ekspresi ini juga akan mengizinkan nomor telepon yang dicakup dalam contoh sebelumnya.

2.4. Nomor Dengan Awalan Internasional

Terakhir, mari kita lihat cara mengizinkan awalan internasional di awal nomor telepon :

@Test public void whenMatchesTenDigitsNumberPrefix_thenCorrect() { Pattern pattern = Pattern.compile("^(\\+\\d{1,3}( )?)?((\\(\\d{3}\\))|\\d{3})[- .]?\\d{3}[- .]?\\d{4}$"); Matcher matcher = pattern.matcher("+111 (202) 555-0125"); assertTrue(matcher.matches()); } 

Untuk mengizinkan awalan di nomor kami, kami telah menambahkan ke awal pola kami karakter:

  • (\\ + \\ d {1,3} ()?)?

Ekspresi ini akan memungkinkan nomor telepon menyertakan awalan internasional, dengan mempertimbangkan bahwa awalan internasional biasanya berupa angka dengan maksimal tiga digit.

3. Menerapkan Beberapa Ekspresi Reguler

Seperti yang telah kita lihat, nomor telepon yang valid dapat memiliki beberapa format berbeda. Oleh karena itu, kami mungkin ingin memeriksa apakah String kami sesuai dengan salah satu format ini.

Di bagian terakhir, kami mulai dengan ekspresi sederhana dan menambahkan lebih banyak kerumitan untuk mencapai tujuan mencakup lebih dari satu format. Namun, terkadang tidak mungkin menggunakan hanya satu ekspresi. Di bagian ini, kita akan melihat cara menggabungkan beberapa ekspresi reguler menjadi satu .

Jika kita tidak dapat membuat ekspresi reguler umum yang dapat memvalidasi semua kemungkinan kasus yang ingin kita bahas, kita dapat menentukan ekspresi yang berbeda untuk setiap kasus dan kemudian menggunakannya bersama-sama dengan menggabungkannya dengan simbol pipa (|).

Mari kita lihat contoh di mana kita menggunakan ekspresi berikut:

  • Ekspresi yang digunakan di bagian terakhir:
    • ^ (\\ + \\ d {1,3} ()?)? ((\\ (\\ d {3} \\)) | \\ d {3}) [-.]? \\ d { 3} [-.]? \\ d {4} $
  • Ekspresi reguler untuk membolehkan angka seperti +111 123 456 789:
    • ^ (\\ + \\ d {1,3} ()?)? (\\ d {3} []?) {2} \\ d {3} $
  • Pola untuk memungkinkan angka seperti +111 123 45 67 89:
    • ^ (\\ + \\ d {1,3} ()?)? (\\ d {3} []?) (\\ d {2} []?) {2} \\ d {2} $
@Test public void whenMatchesPhoneNumber_thenCorrect() { String patterns = "^(\\+\\d{1,3}( )?)?((\\(\\d{3}\\))|\\d{3})[- .]?\\d{3}[- .]?\\d{4}$" + "|^(\\+\\d{1,3}( )?)?(\\d{3}[ ]?){2}\\d{3}$" + "|^(\\+\\d{1,3}( )?)?(\\d{3}[ ]?)(\\d{2}[ ]?){2}\\d{2}$"; String[] validPhoneNumbers = {"2055550125","202 555 0125", "(202) 555-0125", "+111 (202) 555-0125", "636 856 789", "+111 636 856 789", "636 85 67 89", "+111 636 85 67 89"}; Pattern pattern = Pattern.compile(patterns); for(String phoneNumber : validPhoneNumbers) { Matcher matcher = pattern.matcher(phoneNumber); assertTrue(matcher.matches()); } }

Seperti yang dapat kita lihat pada contoh di atas, dengan menggunakan simbol pipa, kita dapat menggunakan tiga ekspresi sekaligus, sehingga memungkinkan kita untuk mencakup lebih banyak kasus daripada hanya dengan satu ekspresi reguler.

4. Kesimpulan

Di artikel ini, kita telah melihat cara memeriksa apakah String berisi nomor telepon yang valid menggunakan ekspresi reguler yang berbeda. Kami juga telah mempelajari cara menggunakan beberapa ekspresi reguler secara bersamaan.

Seperti biasa, kode sumber lengkap artikel tersedia di GitHub.