regex - Memvalidasi nomor telepon dengan JavaScript
Saya menemukan kode ini di sebuah situs web, dan itu bekerja dengan sempurna. Ini memvalidasi bahwa nomor telepon berada dalam salah satu format berikut:
(123) 456-7890 atau 123-456-7890
Masalahnya adalah klien saya (saya tidak tahu kenapa, mungkin urusan klien) ingin menambahkan format lain, sepuluh angka berturut-turut, sesuatu seperti ini: 1234567890.
Saya sedang menggunakan ekspresi reguler ini,
/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/
Bagaimana saya bisa menambahkan bahwa itu juga memvalidasi format lain? Saya tidak pandai dengan ekspresi reguler.
Jawaban #1
Regex pilihan saya adalah:
/^[\+]?[0-9]{0,3}\W?+[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/im
Format yang valid:
(123) 456-7890
(123)456-7890
123-456-7890
123.456.7890
1234567890
+31636363634
075-63546725
+1 (415)-555-1212
+1 (123) 456-7890
+1 (123)456-7890
+1 123-456-7890
+1 123.456.7890
+1 1234567890
+1 075-63546725
+12 (415)-555-1212
+12 (123) 456-7890
+12 (123)456-7890
+12 123-456-7890
+12 123.456.7890
+12 1234567890
+123 075-63546725
+123 (415)-555-1212
+123 (123) 456-7890
+123 (123)456-7890
+123 123-456-7890
+123 123.456.7890
+123 1234567890
+123 075-63546725
+1(415)-555-1212
+1(123) 456-7890
+1(123)456-7890
+1123-456-7890
+1123.456.7890
+11234567890
+1075-63546725
+12(415)-555-1212
+12(123) 456-7890
+12(123)456-7890
+12123-456-7890
+12123.456.7890
+121234567890
+123075-63546725
+123(415)-555-1212
+123(123) 456-7890
+123(123)456-7890
+123123-456-7890
+123123.456.7890
+1231234567890
+123075-63546725
Jawaban #2
Pertama-tama, validator format Anda jelas hanya cocok untuk nomor NANP (kode negara +1). Apakah aplikasi Anda akan digunakan oleh seseorang dengan nomor telepon dari luar Amerika Utara? Jika iya, Anda tidak ingin mencegah orang-orang tersebut memasukkan nomor [internasional] yang sah.
Kedua, validasi Anda salah. Nomor NANP memiliki format NXX NXX XXXX di mana N adalah digit 2-9 dan X adalah digit 0-9. Selain itu, kode area dan pertukaran tidak boleh berformat N11 (berakhiran dengan dua angka satu) untuk menghindari kebingungan dengan layanan khusus kecuali nomor dalam kode area non-geografis (800, 888, 877, 866, 855, 900) dapat memiliki pertukaran N11.
Jadi, regex Anda akan menerima nomor (123) 123 4566 meskipun itu bukan nomor telepon yang valid. Anda dapat memperbaikinya dengan mengganti \d{3} dengan [2-9]{1}\d{2}.
Akhirnya, saya mendapatkan perasaan bahwa Anda sedang memvalidasi input pengguna di browser web. Ingatlah bahwa validasi sisi-klien hanyalah sebuah kenyamanan yang Anda berikan kepada pengguna; Anda masih perlu memvalidasi semua input (lagi) di server.
TL;DR jangan menggunakan ekspresi reguler untuk memvalidasi data dunia nyata yang kompleks seperti nomor telepon atau URL. Gunakan perpustakaan khusus.
Jawaban #3
Jika Anda mencari 10 dan hanya 10 digit, abaikan semuanya kecuali digit-digitnya
return value.match(/\d/g).length===10;
Jawaban #4
/^[+]*[(]{0,1}[0-9]{1,3}[)]{0,1}[-\s\./0-9]*$/g
(123) 456-7890
+(123) 456-7890
+(123)-456-7890
+(123) - 456-7890
+(123) - 456-78-90
123-456-7890
123.456.7890
1234567890
+31636363634
075-63546725
Ini adalah opsi yang sangat longgar dan saya lebih suka tetap seperti ini, sebagian besar saya menggunakannya di formulir pendaftaran di mana pengguna perlu menambahkan nomor telepon mereka. Biasanya pengguna mengalami kesulitan dengan formulir yang menerapkan aturan pemformatan yang ketat, saya lebih suka pengguna mengisi nomor dan memformatnya di tampilan atau sebelum menyimpannya ke basis data. http://regexr.com/3c53v
Jawaban #5
Yang akan saya lakukan adalah mengabaikan format dan memvalidasi konten numeriknya:
var originalPhoneNumber = "415-555-1212";
function isValid(p) {
var phoneRe = /^[2-9]\d{2}[2-9]\d{2}\d{4}$/;
var digits = p.replace(/\D/g, "");
return phoneRe.test(digits);
}
Jawaban #6
REGEX berikut akan memvalidasi salah satu dari format ini:
(123) 456-7890
123-456-7890
123.456.7890
1234567890
/^[(]{0,1}[0-9]{3}[)]{0,1}[-\s\.]{0,1}[0-9]{3}[-\s\.]{0,1}[0-9]{4}$/
Jawaban #7
Di mana str bisa berupa salah satu dari format ini: 555-555-5555 (555)555-5555 (555) 555-5555 555 555 5555 5555555555 1 555 555 5555
function telephoneCheck(str) {
var isphone = /^(1\s|1|)?((\(\d{3}\))|\d{3})(\-|\s)?(\d{3})(\-|\s)?(\d{4})$/.test(str);
alert(isphone);
}
telephoneCheck("1 555 555 5555");Jawaban #8
Saya akan menyarankan menggunakan sesuatu yang lebih jelas (terutama dengan memikirkan siapa yang harus memelihara kode tersebut)... bagaimana dengan:
var formats = "(999)999-9999|999-999-9999|9999999999";
var r = RegExp("^(" +
formats
.replace(/([\(\)])/g, "\\$1")
.replace(/9/g,"\\d") +
")$");
di mana regexp dibangun dari template yang jelas? Menambahkan yang baru kemudian akan sangat mudah dan bahkan mungkin pelanggan itu sendiri bisa melakukannya di halaman "opsi".
Jawaban #9
Coba yang ini - ini juga termasuk validasi untuk format internasional.
/^[+]?(1\-|1\s|1|\d{3}\-|\d{3}\s|)?((\(\d{3}\))|\d{3})(\-|\s)?(\d{3})(\-|\s)?(\d{4})$/gRegex ini memvalidasi format berikut:
- (541) 754-3010 Domestik
- +1-541-754-3010 Internasional
- 1-541-754-3010 Dihubungi di AS
- 001-541-754-3010 Ditelepon dari Jerman
- 191 541 754 3010 Dipanggil dari Prancis
Jawaban #10
Regex
Gunakan pola Regex berikut:
/^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/im
Seperti ini: <input pattern="/^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/im">*
Format yang valid:
(123) 456-7890,
(123)456-7890,
123-456-7890,
123.456.7890,
1234567890,
+31636363634 atau
075-63546725
