Saya menemukan kode ini di beberapa situs web, dan berfungsi dengan baik. Ini memvalidasi bahwa nomor telepon dalam salah satu format ini:
(123) 456-7890 atau 123-456-7890
Masalahnya adalah bahwa klien saya (saya tidak tahu mengapa, mungkin barang-barang klien) ingin menambahkan format lain, sepuluh angka berturut-turut, seperti ini: 1234567890 .
Saya menggunakan ungkapan reguler ini,
/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/
Bagaimana saya dapat menambahkan bahwa itu juga memvalidasi format lain? Saya tidak pandai dengan ekspresi reguler.
javascript
regex
Castro Roy
sumber
sumber
Jawaban:
Pertama, validator format Anda jelas hanya sesuai untuk nomor NANP (kode negara +1). Apakah aplikasi Anda akan digunakan oleh seseorang dengan nomor telepon dari luar Amerika Utara? Jika demikian, Anda tidak ingin mencegah orang-orang itu memasukkan nomor [internasional] yang benar-benar valid.
Kedua, validasi Anda salah. Angka NANP berupa di
NXX NXX XXXX
manaN
digit 2-9 danX
digit 0-9. Selain itu, kode area dan pertukaran mungkin tidak mengambil bentukN11
(diakhiri dengan dua yang) untuk menghindari kebingungan dengan layanan khusus kecuali angka dalam kode area non-geografis (800, 888, 877, 866, 855, 855, 900) dapat memilikiN11
pertukaran.Jadi, regex Anda akan memberikan nomor (123) 123 4566 meskipun itu bukan nomor telepon yang valid. Anda dapat memperbaikinya dengan menggantinya
\d{3}
dengan[2-9]{1}\d{2}
.Akhirnya, saya merasa Anda memvalidasi input pengguna di browser web. Ingat bahwa validasi sisi klien hanya kenyamanan yang Anda berikan kepada pengguna ; Anda masih perlu memvalidasi semua input (lagi) di server.
TL; DR tidak menggunakan ekspresi reguler untuk memvalidasi data dunia nyata yang kompleks seperti nomor telepon atau URL . Gunakan perpustakaan khusus .
sumber
Regex pilihan saya adalah:
Format yang valid:
(123) 456-7890
(123)456-7890
123-456-7890
123.456.7890
1234567890
+31636363634
075-63546725
sumber
i
membuat ekspresi case-insensitive danm
melakukan pencarian multi-line^
di awal dan$
di akhir ia juga dapat menemukan nomor telepon di tengah-tengah stringJika Anda mencari 10 dan hanya 10 digit, abaikan semuanya kecuali digit-
sumber
return (value.match(/\d/g) || []).length == 10
atau lebih sederhana (tapi sama-sama cacat):return value.replace(/\D/g,'').length == 10
./\D/gi.test(value)
. Semua yang bukan digit, termasuk spasi putih, garis putus-putus, dll ...Apa yang akan saya lakukan adalah mengabaikan format dan memvalidasi konten numerik:
sumber
Ini adalah opsi yang sangat longgar dan saya lebih memilih untuk tetap seperti ini, kebanyakan saya menggunakannya dalam formulir pendaftaran di mana pengguna perlu menambahkan nomor telepon mereka. Biasanya pengguna memiliki masalah dengan formulir yang menerapkan aturan pemformatan yang ketat, saya lebih suka pengguna untuk mengisi angka dan memformatnya di layar atau sebelum menyimpannya ke database. http://regexr.com/3c53v
sumber
+41 (79) 123 45 67
(Swiss):/^[+]?[\s./0-9]*[(]?[0-9]{1,4}[)]?[-\s./0-9]*$/g
REGEX berikut akan memvalidasi salah satu format ini:
(123) 456-7890
123-456-7890
123.456.7890
1234567890
sumber
.
atau itu akan cocok dengan karakter sewenang-wenang, melanggar regex Anda.Saya akan menyarankan menggunakan sesuatu yang lebih jelas (terutama berpikir untuk siapa yang harus menjaga kode) ... bagaimana dengan:
di mana regexp dibangun dari templat yang jelas? Menambahkan yang baru akan menjadi no-brainer dan bahkan mungkin pelanggan itu sendiri dapat melakukannya di halaman "opsi".
sumber
Di mana str dapat berupa salah satu dari formart ini: 555-555-5555 (555)555-5555 (555) 555-5555 555 555 5555 5555555555 1 555 555 5555
sumber
Coba yang ini - ini termasuk validasi untuk format internasional juga.
/^[+]?(1\-|1\s|1|\d{3}\-|\d{3}\s|)?((\(\d{3}\))|\d{3})(\-|\s)?(\d{3})(\-|\s)?(\d{4})$/g
Regex ini memvalidasi format berikut:
sumber
/^\+?1?\s*?\(?\d{3}(?:\)|[-|\s])?\s*?\d{3}[-|\s]?\d{4}$/
Meskipun posting ini sudah tua tetapi ingin meninggalkan kontribusiku. ini diterima: 5555555555 555-555-5555 (555)555-5555 1 (555) 555-5555 1 555 555 5555 1 555-555-5555 1 (555) 555-5555
ini tidak diterima:
555-5555 -> untuk menerima penggunaan ini:
^\+?1?\s*?\(?(\d{3})?(?:\)|[-|\s])?\s*?\d{3}[-|\s]?\d{4}$
5555555 -> untuk menerima penggunaan ini:
^\+?1?\s*?\(?(\d{3})?(?:\)|[-|\s])?\s*?\d{3}[-|\s]?\d{4}$
1 555) 555-5555 123 ** & !! asdf # 55555555 (6505552368) 2 (757) 622-7382 0 (757) 622-7382 -1 (757) 622-7382 2 757 622-7382 10 (757) 622 -7382 27576227382 (275) 76227382 2 (757) 6227382 2 (757) 622-7382 (555) 5 (55?) - 5555
ini adalah kode yang saya gunakan:
sumber
Ini akan berhasil:
The
?
menandakan karakter yang kelompok sebelumnya harus dicocokkan nol atau satu kali. Grup(-|\s)
akan mencocokkan a-
atau|
karakter. Menambahkan?
setelah kemunculan kedua grup ini di regex Anda memungkinkan Anda untuk mencocokkan urutan 10 digit berturut-turut.sumber
sangat sederhana
sumber
Jawaban semua orang bagus, tapi inilah yang saya pikir sedikit lebih komprehensif ...
Ini ditulis untuk penggunaan javascript yang cocok dengan satu angka dalam satu baris:
Jika Anda ingin mencocokkan pada batas kata, cukup ubah ^ dan $ ke \ b
Saya menyambut setiap saran, koreksi, atau kritik terhadap solusi ini. Sejauh yang saya tahu, ini cocok dengan format NANP (untuk nomor AS - saya tidak memvalidasi negara-negara Amerika Utara lainnya saat membuat ini), menghindari kesalahan 911 (tidak bisa dalam kode area atau kode wilayah), menghilangkan hanya angka-angka 555 yang benar-benar tidak valid (kode wilayah 555 diikuti oleh 01xx di mana x = angka apa pun).
sumber
/^(()?\d{3}())?(-|\s)?\d{3}(-|\s)?\d{4}$/
The
?
menandakan karakter yang kelompok sebelumnya harus dicocokkan nol atau satu kali. Grup(-|\s)
akan mencocokkan a-
atau|
karakter.sumber
Saya harus setuju bahwa memvalidasi nomor telepon adalah tugas yang sulit. Adapun masalah khusus ini saya akan mengubah regex dari
untuk
karena satu-satunya elemen lagi yang menjadi tidak perlu adalah tanda hubung / spasi terakhir.
sumber
Jika Anda menggunakan tag input daripada kode ini akan membantu Anda. Saya menulis kode ini sendiri dan saya pikir ini cara yang sangat baik untuk digunakan dalam input. tetapi Anda dapat mengubahnya menggunakan format Anda. Ini akan membantu pengguna untuk memperbaiki format mereka pada tag input.
sumber
Hanya ingin menambahkan solusi khusus untuk memilih nomor telepon non-lokal (800 dan 900 jenis).
sumber
Reg ini cocok untuk nomor telepon internasional dan berbagai format nomor ponsel.
Berikut ini adalah persamaan reguler: / ^ (+ {1} \ d {2,3} \ s? [(] {1} \ d {1,3} [)] {1} \ s? \ D + | + \ d {2,3} \ s {1} \ d + | \ d +) {1} [\ s | -]? \ d + ([\ s | -]? \ d +) {1,2} $ /
Ini adalah fungsi JavaScript
Ini memvalidasi format berikut:
+44 07988-825 465 (dengan kombinasi tanda hubung sebagai pengganti ruang kecuali bahwa hanya spasi yang harus mengikuti +44)
+44 (0) 7988-825 465 (dengan kombinasi tanda hubung sebagai pengganti spasi kecuali bahwa tidak ada tanda hubung dapat ada secara langsung sebelum atau setelah (0) dan spasi sebelum atau setelah (0) tidak perlu ada)
123 456-789 0123 (dengan kombinasi tanda hubung sebagai pengganti spasi)
123-123 123 (dengan kombinasi tanda hubung sebagai pengganti spasi)
123 123456 (Spasi dapat diganti dengan tanda hubung)
1234567890
Tidak ada spasi ganda atau tanda hubung ganda dapat ada untuk semua format.
sumber
Validasi nomor telepon + kembalikan data yang diformat
sumber
coba ini
format yang valid
https://regex101.com/r/QXAhGV/1
sumber
{1}
tidak berguna,{0,}
lebih baik ditulis*
. Mengapa menggunakan semua grup tangkap ini? Mereka memperlambat proses.Fungsi ini bekerja untuk kita dengan baik:
sumber
Ekspresi Reguler Sederhana:
/\b\d{3}[-.]?\d{3}[-.]?\d{4}\b/g
Lihat formatnya, semoga berhasil:
444-555-1234
f: 246.555.8888
m: 1235554567
sumber
Ini akan memvalidasi nomor telepon dengan format variabel:
\\(?\d{3}\\)?
menemukan 3 digit terlampir oleh tanda kurung atau tidak.([\-\s\.])?
menemukan karakter pemisah ini atau tidak\d{3}
menemukan 3 digit\1
menggunakan pemisah yang cocok pertama - ini memastikan bahwa pemisahnya sama. Jadi (000) 999-5555 tidak akan memvalidasi di sini karena ada pemisah spasi dan tanda hubung, jadi hapus saja "\ 1" dan ganti dengan sub-pola pemisah (melakukannya juga akan memvalidasi format non standar). Namun Anda harus tetap mengisyaratkan format untuk input pengguna.\d{4}
menemukan 4 digitMemvalidasi:
BTW ini untuk JavaScript karenanya untuk meloloskan diri.
sumber
Coba fungsi js ini. Mengembalikan nilai true jika cocok dan false jika gagal Ref
sumber
Abaikan semuanya kecuali angka.
Inilah yang saya gunakan:
sumber
coba ini
format yang valid:
sumber