Jadi saya merancang halaman web yang akan digunakan untuk pengguna global, termasuk pengguna dari Kanada, AS, India, Inggris, dll. Saya perlu menerapkan validasi untuk bidang nomor telepon ini, tapi saya tidak yakin cara terbaik untuk menyelesaikannya. .
Beberapa format valid yang dapat saya pikirkan adalah:
- 1800123456 (India)
- penggunaan "-" dalam nomor telepon AS
Saya agak bingung tentang karakter khusus apa yang harus saya izinkan pengguna untuk masuk (mis. - / ()
). Bagaimana orang lain memecahkan ini di masa lalu?
Jawaban:
Hanya karena Anda dapat membatasi sesuatu (itulah yang Anda bayar, sebagai programmer, untuk menulis kode), itu tidak berarti Anda harus melakukan ini.
Apa gunanya memvalidasi angka? Mengapa ini bermanfaat? Apakah akan gagal jika pengguna memasukkan "0800DIALTHIS", atau "私 は 電話 番号 を 持 っ て い い", atau "(499) 123-45-67 добавочный 4425"? Pasti (Anda mengatakan "global". Bukan?), Sementara pengguna hanya ingin menyampaikan informasi penting tentang cara menghubungi mereka melalui telepon.
Selain itu, cara data disimpan harus diatur oleh cara mereka digunakan. Bagaimana Anda akan menggunakan angka-angkanya? Apakah mereka akan digunakan untuk mengirim spam SMS secara otomatis — atau mereka akan dipanggil secara manual oleh manajer? Jika itu yang terakhir, maka membiarkan karakter tambahan apa pun tidak apa-apa, karena otak manusia akan dapat mengurai mereka dengan cara yang mereka lihat paling sesuai; dan dalam hal ini Anda tidak benar-benar membutuhkan validasi apa pun, yang hanya akan mengganggu pengguna manusia.
sumber
Akan sangat sulit untuk mengetahui apakah suatu angka valid atau tidak, karena negara yang berbeda memiliki format yang berbeda. Di Prancis, misalnya, 06 12 34 56 78 adalah nomor telepon yang valid, sedangkan 00 12 34 56 78 tidak, karena nomor tersebut dapat dimulai hanya dengan 01 hingga 09, 06 dan 07 sebagai ponsel.
Juga, nomor telepon dapat ditulis dalam beberapa format bahkan di negara yang sama. Saya telah melihat:
dua yang terakhir adalah bentuk internasional.
Secara umum:
+
hanya simbol sebagai karakter utama, tanda hubung, titik, koma, dan spasi.Tidak terlalu valid dalam validasi per negara. Tidak hanya ada banyak aturan, tetapi juga aturan berubah. Misalnya di Perancis, beberapa tahun yang lalu tidak ada nomor telepon yang dimulai oleh 07 atau 09. Dengan meningkatnya jumlah ponsel muncul 07. Dengan layanan VoIP muncul 09.
Anda juga dapat mengambil nomor khusus akun. Misalnya 3635 adalah angka yang valid di Prancis, meskipun hanya berisi empat digit dan dimulai dengan yang bukan nol.
sumber
+31 (0)30 1234567
mana 31 adalah Belanda, 030 adalah kode area dan 1234567 adalah pelanggan.JANGAN membatasi karakter; ambil semua yang dia berikan padamu. Tetapi ketika Anda memanggilnya, ambil hanya digit. Bahkan saat itu mungkin salah bekerja. Saya berada di Thailand setahun sebelum saya mengetahui bahwa 123-4567-9 berarti bukan perpanjangan, tetapi serangkaian angka, 1234567 hingga 1234569. Ketika saya memutar "12345679" itu berhasil, karena perusahaan telepon mengabaikan angka tambahan. Ambil apa saja, panggil hanya digit.
Saya suka bahwa ponsel baru saya memungkinkan spasi di nomor telepon. Saya bisa memasukkan "123 456 7890" begitu saja, tidak semua tumbuk bersama.
sumber
Kurung, tanda hubung, dan ruang.
Setelah pengguna memasukkan nomor telepon yang mengandung simbol-simbol itu, Anda dapat memvalidasinya sesuai dengan aturan khusus negara (yang Anda harus mengumpulkan aturan itu untuk setiap negara), dan kemudian non-digit benar-benar dapat dihapus ketika itu diproses secara internal di perangkat lunak Anda.
Ini karena IDD (panggilan langsung internasional) membuat tidak mungkin untuk meminta "karakter khusus" untuk benar-benar digunakan dalam memanggil nomor, dengan pengecualian jeda dalam meninju angka.
(Saya sama sekali tidak memiliki pengetahuan tentang ini; tolong perbaiki saya jika saya salah.)
sumber
Satu-satunya hal yang harus divalidasi adalah jumlah digit - apakah cocok dengan apa yang Anda perlu panggil?
Kode akses dapat / tidak boleh diizinkan untuk dimasukkan oleh pengguna (yaitu +1 untuk AS). Saya akan memberi tahu Anda alasannya - jika orang Amerika yang memasukinya, dan mereka tidak begitu paham, mereka mungkin ingin memasukkan 001 alih-alih 1. Alasannya adalah 00 adalah bagaimana Anda mengakses nomor internasional dari dalam AS. Mereka tidak tahu apa perbedaan antara itu dan hanya +1. Jika Anda menelepon saluran telepon antar kode area (dan kadang-kadang dalam kode area yang sama), Anda juga akan memasukkan 1 sebelum nomor itu. Sama seperti Jepang.
Ambil Jepang. Garis tanah provinsi diakses dengan angka 0 di depannya. Tetapi jika Anda melakukan panggilan dari luar Jepang, Anda tidak perlu 0.
Nomor ponsel di China adalah 10 digit dan di Hong Kong mereka adalah 8. Jika formulir Anda menangkap negara, maka jangan pernah meminta kode negara di awal nomor - cukup tunjukkan secara otomatis dalam teks hanya baca tepat di sebelah nomor yang harus mereka masukkan.
Daftarnya berlanjut.
Cukup validasi jumlah digit (pastikan tidak ada huruf yang diterima) dan buat pengguna akhir mudah memasukkan jumlah digit yang tepat. Yaitu mereka tidak harus memasukkan kode negara dan jika formulir Anda sangat pintar, mereka bahkan mungkin tidak perlu memasukkan kode area jika itu nomor darat. Atau jika mereka mulai memasukkan hal-hal seperti kode akses, seperti 0 di depan nomor Jepang, beri tahu mereka bahwa mereka tidak perlu.
Setiap karakter lain, selain digit, seharusnya menjadi titik diperdebatkan - mereka tidak memiliki kesempatan untuk memasukkannya.
sumber
Google memiliki lib untuk ini:
https://github.com/googlei18n/libphonenumber
Itu upaya terbaik, saya pikir pasti ada kasus yang tidak ditangani karena ini bukan berarti tugas yang mudah. Biarkan pengguna memasukkan angka dan huruf, kemudian menghapus huruf dengan kode.
sumber