Saya ingin menulis ekspresi reguler untuk nomor telepon jenis AS standar yang mendukung format berikut:
###-###-####
(###) ###-####
### ### ####
###.###.####
dimana # berarti angka apapun. Sejauh ini saya muncul dengan ekspresi berikut
^[1-9]\d{2}-\d{3}-\d{4}
^\(\d{3}\)\s\d{3}-\d{4}
^[1-9]\d{2}\s\d{3}\s\d{4}
^[1-9]\d{2}\.\d{3}\.\d{4}
masing-masing. Saya tidak begitu yakin apakah yang terakhir benar untuk cek bertitik. Saya juga ingin tahu apakah ada cara untuk menulis satu ekspresi alih-alih 4 ekspresi berbeda yang memenuhi format berbeda yang saya sebutkan. Jika demikian, saya tidak yakin bagaimana cara melakukannya. Dan juga bagaimana cara mengubah ekspresi / ekspresi sehingga saya juga bisa menyertakan kondisi untuk mendukung kode area sebagai komponen opsional. Sesuatu seperti
+1 ### ### ####
dengan +1 adalah kode area dan opsional.
Jawaban:
Cocok dengan berikut ini
Jika Anda tidak ingin mencocokkan nomor non-AS gunakan
Pembaruan:
Seperti yang diperhatikan oleh pengguna Simon Weaver di bawah ini, jika Anda juga tertarik untuk mencocokkan nomor yang tidak diformat, buat saja kelas karakter pemisah opsional sebagai
[\s.-]?
sumber
?
sana berlaku pada tanda kurung()
, bukan pada angka. Regex terkait lengkap adalah\(?\d{3}\)?
.\d{3}
menentukan bahwa harus ada tiga digit di antara()
yang (dibuat) opsional (oleh?
).?
setelah masing[\s.-]
- masing untuk menjadikannya opsional^(\+\d{1,2}\s)?((\(\d{3}\))|(\d{3}))[\s.-]\d{3}[\s.-]\d{4}$
. (Saya pada dasarnya hanya menduplikasi segmen RegEx yang mencakup kode area dan mengizinkan satu varian dengan parens dan satu tanpa)Ada banyak variasi yang mungkin untuk masalah ini. Berikut adalah ekspresi reguler yang mirip dengan jawaban yang saya tempatkan sebelumnya di SO.
Ini akan cocok dengan contoh berikut dan banyak lagi:
Terlepas dari cara memasukkan nomor telepon, grup penangkapan dapat digunakan untuk menguraikan nomor telepon sehingga Anda dapat memprosesnya dalam kode Anda.
Berikut ini rincian ekspresi jika Anda tertarik:
Untuk menjadikan Kode Area opsional, cukup tambahkan tanda tanya setelah (\ d {3}) untuk kode area.
sumber
\s
awal dan akhir tidak diperlukan, karena saya menggunakan untuk validasi, dan field sudah dipangkas.^(\+\d{1,2}\s?)?1?\-?\.?\s?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$
Cocok dengan nomor telepon ini:
Lihat regex101.com
sumber
Ini yang cukup kompak yang saya buat.
Diuji terhadap kasus penggunaan berikut.
sumber
Menambahkan contoh menggunakan solusi yang disebutkan di atas di jsfiddle. Saya telah mengubah kode sedikit sesuai kebutuhan klien saya. Semoga ini juga membantu seseorang.
Lihat Contoh Di Sini
sumber
coba ini untuk pengguna Pakistan. Ini yang cukup ringkas yang saya buat.
Diuji terhadap kasus penggunaan berikut.
sumber
Nomor telepon regex yang saya gunakan:
/^[+]?(\d{1,2})?[\s.-]?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$/
Meliputi:
sumber
Ekspresi untuk 1, 3 dan 4 sangat mirip, jadi Anda dapat menggunakan:
Perhatikan bahwa, tergantung pada bahasa dan merek ekspresi reguler yang digunakan, Anda mungkin perlu meletakkan
\2
alih-alih$2
atau pencocokan semacam itu mungkin tidak didukung sama sekali.Saya tidak melihat cara yang baik untuk menggabungkan ini dengan format 2, selain dari yang sudah jelas
^(regex for 1,3,4|regex for 2)$
mana yang jelek, kikuk dan menyulitkan untuk mengeluarkan bagian-bagian angka.Sedangkan untuk kode areanya bisa anda tambahkan
(\+\d)?
di awal untuk menangkap satu digit kode area (maaf saya tidak tahu format kode areanya).sumber
Bagaimana dengan ini?
EDIT: Saya lupa tentang () satu. EDIT 2: Salah bagian 3 digit pertama.
sumber
.
saat berada di kelas karakter, jadi[-\.\s]
seharusnya begitu[-.\s]
, karena kita tidak ingin mencocokkan garis miring terbalik.[\.]
dan[.]
keduanya hanya cocok dengan titik, sementara[\\.]
cocok dengan titik dan garis miring terbalik. Terima kasih atas tanggapan Anda.Dimulai dengan jawaban @ Ravi, saya juga menerapkan beberapa aturan validasi untuk Kode NPA (Area) .
Khususnya:
Ada beberapa batasan lain, termasuk blok yang dicadangkan (N9X, 37X, 96X) dan 555, tetapi saya mengabaikannya, terutama karena blok yang dicadangkan mungkin akan digunakan di masa mendatang, dan 555 berguna untuk pengujian.
Inilah yang saya dapatkan:
Bergantian, jika Anda juga ingin mencocokkan nilai kosong (jika bidang tidak diperlukan), Anda dapat menggunakan:
Kasus uji saya untuk nomor yang valid (banyak dari jawaban @Francis ') adalah:
Kasus uji saya yang tidak valid meliputi:
Ekspresi reguler saya tidak menyertakan pengelompokan untuk mengekstrak grup digit, tetapi dapat dimodifikasi untuk menyertakannya.
sumber
Mungkin yang paling mudah dibandingkan dengan beberapa lainnya.
Ini cocok dengan yang berikut:
sumber
Kode ini akan cocok dengan nomor telepon AS atau Kanada, dan juga akan memastikan bahwa itu adalah kode area dan pertukaran yang valid:
Uji di Regex101.com
sumber
Regex patter untuk memvalidasi 10 digit nomor telepon biasa ditambah kode internasional opsional (1 hingga 3 digit) dan nomor ekstensi opsional (sejumlah digit):
Demo: https://www.regextester.com/103299
Entri yang valid:
sumber
Bagi saya ekspresi reguler ini paling berguna untuk 10 digit nomor kontak:
Referensi : https://regex101.com/r/QeQewP/1
Penjelasan:
sumber
sumber
Ini adalah versi yang lebih komprehensif yang akan cocok sebanyak yang saya pikirkan serta memberi Anda pencocokan grup untuk negara, wilayah, pertama, dan terakhir.
sumber
bagaimana dengan beberapa angka dengan "+" dan pisahkan dengan ";" Karakter "," "-" atau ""?
sumber
Saya berakhir dengan
const regexBase = '(?:\\+?(\\d{1,3}))?[-. (]*(\\d{3})?[-. )]*(\\d{3})[-. ]*(\\d{4,5})(?: *x(\\d+))?'; const phoneRegex = new RegExp('\\s*' + regexBase + '\\s*', 'g');
ini untuk memungkinkan hal-hal seperti angka belanda, misalnya
+358 300 20200
sumber
Regex di atas adalah sedikit modifikasi dari
@Francis Gagnon.
Tujuan: Untuk mendeteksi pola yang mungkin, pengguna dapat membagikan nomor telepon AS mereka
Versi 1:
Versi 2:
Apa isinya: Kasus uji dapat menjadi bagian dari string. Dalam versi satu kasus pengujian harus menjadi awal dari sebuah baris untuk bekerja.
Jika Anda dapat menemukan pola yang bisa gagal, silakan lakukan komentar saya akan memperbaikinya.
Kasus Uji: Lulus
sumber
Saya hanya melempar jawaban ini ke sana karena ini memecahkan masalah saya, ini didasarkan pada jawaban @ stormy, tetapi menyertakan kode negara 3 digit dan yang lebih penting dapat digunakan di mana saja dalam string, tetapi tidak akan cocok bukan diawali dengan spasi / awal string dan diakhiri dengan batas kata. Ini berguna agar tidak cocok dengan nomor acak di tengah URL atau sesuatu
sumber