Saya juga menyarankan melihat Perpustakaan Google " libphonenumber ". Saya tahu ini bukan regex tetapi ia melakukan apa yang Anda inginkan.
Misalnya, ia akan mengenali bahwa:
15555555555
adalah angka yang mungkin tetapi bukan angka yang valid. Ini juga mendukung negara-negara di luar AS.
Sorotan fungsionalitas:
- Memilah / memformat / memvalidasi nomor telepon untuk semua negara / wilayah di dunia.
getNumberType
- mendapatkan jenis nomor berdasarkan nomor itu sendiri; mampu membedakan Fixed-line, Mobile, Bebas Pulsa, Tingkat Premium, Biaya Bersama, VoIP dan Nomor Pribadi (jika memungkinkan).
isNumberMatch
- mendapat tingkat kepercayaan apakah dua angka bisa sama.
getExampleNumber
/ getExampleNumberByType
- memberikan nomor contoh yang valid untuk semua negara / wilayah, dengan opsi untuk menentukan jenis contoh nomor telepon yang dibutuhkan.
isPossibleNumber
- Cepat menebak apakah nomor adalah nomor telepon yang mungkin dengan hanya menggunakan informasi panjang, jauh lebih cepat daripada validasi penuh.
isValidNumber
- validasi penuh nomor telepon untuk wilayah yang menggunakan informasi panjang dan awalan.
AsYouTypeFormatter
- memformat nomor telepon dengan cepat saat pengguna memasukkan setiap digit.
findNumbers
- Menemukan angka dalam input teks.
PhoneNumberOfflineGeocoder
- memberikan informasi geografis yang terkait dengan nomor telepon.
Contohnya
Masalah terbesar dengan validasi nomor telepon adalah sangat tergantung secara budaya.
- Amerika
(408) 974–2042
adalah nomor AS yang valid
(999) 974–2042
adalah tidak valid nomor AS
- Australia
0404 999 999
adalah nomor Australia yang valid
(02) 9999 9999
juga nomor Australia yang valid
(09) 9999 9999
adalah tidak valid nomor Australia
Persamaan reguler baik untuk memeriksa format nomor telepon, tetapi itu tidak benar-benar akan dapat memeriksa validitas nomor telepon.
Saya akan menyarankan melewatkan ekspresi reguler sederhana untuk menguji nomor telepon Anda, dan menggunakan perpustakaan seperti Google libphonenumber
(tautan ke proyek GitHub) .
Memperkenalkan nomor telepon!
Dengan menggunakan salah satu contoh yang lebih kompleks 1-234-567-8901 x1234
,, Anda mendapatkan data berikut dari libphonenumber
(tautan ke demo online) :
Validation Results
Result from isPossibleNumber() true
Result from isValidNumber() true
Formatting Results:
E164 format +12345678901
Original format (234) 567-8901 ext. 123
National format (234) 567-8901 ext. 123
International format +1 234-567-8901 ext. 123
Out-of-country format from US 1 (234) 567-8901 ext. 123
Out-of-country format from CH 00 1 234-567-8901 ext. 123
Jadi, Anda tidak hanya belajar jika nomor telepon itu valid (yang mana), tetapi Anda juga mendapatkan pemformatan nomor telepon yang konsisten di tempat Anda.
Sebagai bonus, libphonenumber
memiliki sejumlah dataset untuk memeriksa validitas nomor telepon, jadi, memeriksa nomor seperti +61299999999
(versi internasional (02) 9999 9999
) akan dikembalikan sebagai nomor yang valid dengan pemformatan:
Validation Results
Result from isPossibleNumber() true
Result from isValidNumber() true
Formatting Results
E164 format +61299999999
Original format 61 2 9999 9999
National format (02) 9999 9999
International format +61 2 9999 9999
Out-of-country format from US 011 61 2 9999 9999
Out-of-country format from CH 00 61 2 9999 9999
libphonenumber juga memberi Anda banyak manfaat tambahan, seperti mengambil lokasi tempat nomor telepon terdeteksi, dan juga mendapatkan informasi zona waktu dari nomor telepon:
PhoneNumberOfflineGeocoder Results
Location Australia
PhoneNumberToTimeZonesMapper Results
Time zone(s) [Australia/Sydney]
Tetapi nomor telepon Australia yang tidak valid ( (09) 9999 9999
) mengembalikan bahwa itu bukan nomor telepon yang valid.
Validation Results
Result from isPossibleNumber() true
Result from isValidNumber() false
Versi Google memiliki kode untuk Java dan Javascript, tetapi orang-orang juga telah mengimplementasikan perpustakaan untuk bahasa lain yang menggunakan dataset nomor telepon Google i18n:
Kecuali Anda yakin bahwa Anda akan selalu menerima angka dari satu lokal, dan mereka selalu akan berada dalam satu format, saya sangat menyarankan untuk tidak menulis kode Anda sendiri untuk ini, dan menggunakan libphonenumber untuk memvalidasi dan menampilkan nomor telepon.