Sahkan Nombor Telefon Dengan Java Regex

1. Gambaran keseluruhan

Kadang kala, kita perlu mengesahkan teks untuk memastikan bahawa kandungannya mematuhi beberapa format. Dalam tutorial ringkas ini, kita akan melihat cara mengesahkan format nombor telefon yang berbeza menggunakan ungkapan biasa.

2. Ungkapan Biasa untuk Mengesahkan Nombor Telefon

2.1. Nombor Sepuluh Digit

Mari kita mulakan dengan ungkapan mudah yang akan memeriksa apakah nombor itu mempunyai 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()); }

Ungkapan ini akan membenarkan nombor seperti 2055550125 .

2.2. Nombor Dengan Ruang Putih, Titik atau Tanda Tanda

Dalam contoh kedua, mari kita lihat bagaimana kita boleh membenarkan ruang kosong, titik, atau tanda hubung (-) antara nombor:

@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 matlamat tambahan ini (ruang kosong atau tanda hubung pilihan), kami hanya menambahkan watak:

  • [-.]?

Corak ini akan membolehkan nombor seperti 2055550125 , 202 555 0125 , 202.555.0125 , dan 202-555-0125 .

2.3. Nombor Dengan Tanda kurung

Seterusnya, mari tambahkan kemungkinan untuk mempunyai bahagian pertama telefon kami 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 membenarkan kurungan pilihan dalam nombor, kami telah menambahkan watak berikut ke ungkapan biasa kami:

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

Ungkapan ini akan membenarkan nombor seperti (202) 5550125 , (202) 555-0125 atau (202) -555-0125 . Selain itu, ungkapan ini juga akan membenarkan nombor telefon yang diliputi dalam contoh sebelumnya.

2.4. Nombor Dengan Awalan Antarabangsa

Akhirnya, mari kita lihat bagaimana membenarkan awalan antarabangsa pada permulaan nombor telefon :

@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 membenarkan awalan dalam nombor kami, kami telah menambahkan pada permulaan corak watak kami:

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

Ungkapan ini akan membolehkan nombor telefon memasukkan awalan antarabangsa, dengan mengambil kira bahawa awalan antarabangsa biasanya nombor dengan maksimum tiga digit.

3. Mengaplikasi Pelbagai Ungkapan Biasa

Seperti yang telah kita lihat, nombor telefon yang sah boleh menggunakan beberapa format yang berbeza. Oleh itu, kami mungkin ingin memeriksa sama ada String kami mematuhi salah satu format ini.

Pada bahagian terakhir, kami memulakan dengan ungkapan sederhana dan menambahkan lebih banyak kerumitan untuk mencapai tujuan merangkumi lebih dari satu format. Namun, kadang-kadang tidak mungkin hanya menggunakan satu ungkapan. Di bahagian ini, kita akan melihat cara menggabungkan beberapa ungkapan biasa menjadi satu .

Sekiranya kita tidak dapat membuat ungkapan biasa yang dapat mengesahkan semua kemungkinan kes yang ingin kita lindungi, kita dapat menentukan ungkapan yang berbeza untuk setiap kes dan kemudian menggunakannya semuanya dengan menggabungkannya dengan simbol paip (|).

Mari lihat contoh di mana kita menggunakan ungkapan berikut:

  • Ungkapan yang digunakan pada bahagian terakhir:
    • ^ (\\ + \\ d {1,3} ()?)? ((\\ (\\ d {3} \\)) | \\ d {3}) [-.]? \\ d { 3} [-.]? \\ d {4} $
  • Ungkapan biasa untuk membenarkan nombor seperti +111 123 456 789:
    • ^ (\\ + \\ d {1,3} ()?)? (\\ d {3} []?) {2} \\ d {3} $
  • Corak untuk membenarkan nombor 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 dalam contoh di atas, dengan menggunakan simbol pipa, kita dapat menggunakan tiga ungkapan sekaligus, sehingga memungkinkan kita untuk menutup lebih banyak kes daripada hanya dengan satu ungkapan biasa.

4. Kesimpulan

Dalam artikel ini, kami telah melihat bagaimana untuk memeriksa apakah String mengandungi nombor telefon yang sah menggunakan ungkapan biasa yang berbeza. Kami juga telah belajar bagaimana menggunakan banyak ungkapan biasa pada masa yang sama.

Seperti biasa, kod sumber penuh artikel terdapat di GitHub.