Karakter khusus apa yang harus diperbolehkan untuk Nomor Telepon?

20

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:

  1. 1800123456 (India)
  2. 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?

Ranger
sumber
1
Bagaimana dengan nomor telepon yang dinyatakan dengan huruf, mis. 0800DIALTHIS?
mouviciel
3
Apa yang ingin Anda cegah? Pengguna berbohong? Pengguna tidak ingin Anda tahu nomornya? Pengguna terlalu malas untuk memasukkan sesuatu? Pengguna melakukan kesalahan ketik?
Benjol
@ mouviviel: ya itu juga saya perlu berpikir tentang saya mengambil satu skenario pembatalan pada suatu waktu sehingga saya akan memikirkannya.
Ranger
@Benjol: Aplikasi ini bersifat komersial sehingga kami tidak dapat mengambil risiko pada pelanggan kami, saya tahu pengguna akan memasukkan nomor yang benar tetapi bagaimana jika dia tidak. Valdation sangat penting karena mereka menyimpan aplikasi tidak hanya kesalahan ketik. Saya tidak ingin DB saya dipenuhi dengan sampah yang tidak berguna.
Ranger
5
baik apa yang Anda lakukan untuk memvalidasi alamat email mereka? Anda akan mengamati bahwa hampir semua situs web melakukan validasi "kehidupan nyata" (yaitu mengirimi Anda email). Saya pikir jika nomor telepon itu penting, Anda harus melakukan sesuatu yang setara.
Benjol

Jawaban:

21

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.

P Shved
sumber
7
+1 untuk "pengguna hanya ingin menyampaikan informasi penting kepada Anda". Saya terlalu sering melihat validasi yang tidak perlu yang hanya mengganggu pengguna tanpa persyaratan teknis (atau organisasi) yang sebenarnya.
perdian
6
+1 - validasi nomor telepon (terutama yang didefinisikan secara luas) ini sering tidak berguna, bukan bukti masa depan (KL5-6743 digunakan untuk menjadi nomor telepon yang valid, misalnya), dan hanya mengganggu pengguna yang memiliki kasing khusus. Jadikan Anda nomor telepon bidang teks besar dan biarkan dialer otomatis (jika ada dalam skenario ini) menguraikan apa yang mereka bisa. Pengecualian dapat diajukan kepada manusia yang dapat menangani situasi dengan tepat.
EZ Hart
8
+1 dan yang paling penting hanya karena nomor telepon valid, itu tidak berarti itu ada, dan bahkan jika itu ada, itu tidak berarti itu milik orang yang dipermasalahkan ...
Benjol
Oh ya, saya akan mencari tahu negara tempat pengguna utama kami tinggal dan kemudian saya akan menulis beberapa kode validasi. Terima kasih semua, saya menghargai usaha Anda.
Ranger
4
@Anger. Itu adalah kebalikan dari jawaban yang didapat.
Sebastian Redl
7

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:

  • 06 12 34 56 78
  • 0612345678
  • 06.12.34.56.78
  • 06-12-34-56-78
  • +33612345678
  • +33 (0) 6 12 34 56 78

dua yang terakhir adalah bentuk internasional.

Secara umum:

  1. Izinkan tanda kurung, +hanya simbol sebagai karakter utama, tanda hubung, titik, koma, dan spasi.
  2. Jika memungkinkan, hanya ingat formulir yang dinormalisasi (yaitu +33 (0) 612345678).
  3. Jika ini tidak memungkinkan, setidaknya hapus karakter pemisah (seperti 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.

Arseni Mourzenko
sumber
1
Akan membantu untuk menunjukkan penggunaan tanda kurung dalam contoh Anda. Nomor internasional sering menggunakannya untuk melampirkan nol di depan kode area untuk menunjukkan bahwa Anda tidak memanggilnya saat menelepon dari luar negeri. Misalnya di +31 (0)30 1234567mana 31 adalah Belanda, 030 adalah kode area dan 1234567 adalah pelanggan.
Marjan Venema
2
Jangan lupa bidang opsional untuk kode ekstensi (yang mungkin perlu memungkinkan pound atau kunci asterisk).
rwong
@MarjanVenema, saya tidak melakukan banyak panggilan internasional, tapi standar untuk menambahkan nol, dan menambahkan tanda kurung (0) untuk memberitahu Anda TIDAK untuk memanggilnya? Bukankah lebih mudah untuk meninggalkan 0 sama sekali?
CaffGeek
@Chad: Tidak. Ini memberi tahu pengguna internasional bahwa mereka harus meninggalkannya dan memberi tahu pengguna nasional bahwa mereka perlu menggunakannya. Tidak semua negara memiliki kode area yang dimulai dengan nol. Melakukannya dengan cara ini memastikan bahwa ketika seseorang melihat nomor mereka tahu apa yang harus dilakukan ketika mereka berada di dan ketika mereka berada di luar negeri. Bagaimanapun, tidak semua orang yang menelepon secara nasional perlu menjadi residen ...
Marjan Venema
@MarjanVenema, oh, begitu, tidak menyadari bahwa pengguna nasional membutuhkannya, mempelajari sesuatu yang baru hari ini.
CaffGeek
3

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.

Andy Canfield
sumber
2
+100. Tidak ada yang lebih buruk daripada komputer yang mengatakan "tolong hapus - dari nomor", seolah-olah komputer tidak memiliki petunjuk bagaimana melakukannya sendiri. Sama untuk nomor kartu kredit, FWIW.
Bryan Oakley
0

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.)

rwong
sumber
3
Anda lupa tanda \ + untuk akses internasional
Marjan Venema
2
izinkan huruf x juga - setidaknya di AS umum untuk awalan ekstensi dengan x (mis: 555-1212 x123).
Bryan Oakley
0

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.

Todd Main
sumber
1
Saya tidak setuju untuk memastikan tidak ada surat yang diterima - silakan dan terima, lalu abaikan saja. Orang secara alami menulis ekstensi dengan "x" terkemuka (mis: 555-1212 x123). Mengapa tidak mengizinkannya? Manusia dapat menguraikannya dengan baik, dan jika komputer perlu menggunakannya, ia dapat menghapus non-digit sepele.
Bryan Oakley
0

Google memiliki lib untuk ini:

Pustaka Java, C ++, dan JavaScript umum Google untuk mem-parsing, memformat, dan memvalidasi nomor telepon internasional.

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.

Christophe Roussy
sumber