[英]Javascript Regex - What to use to validate a phone number?
谁能告诉我什么 RegEx 可以用来验证国际电话号码,包括号码之间的空格,还允许这些字符: - ( )
。
字符串中的数字数量不太重要,我希望用户能够根据需要输入示例 1 或 2 之类的内容:
例子:
+44 (0) 207 111 1111
442071111111
据我所知,我已经通读并测试了对一些类似问题的已发布答案,但到目前为止,它们都没有按照我希望的方式为我工作。
请有人帮我清楚地解释上面应该如何编写以进行验证?
非常感谢任何可以提供帮助的人。
试试这个代码
HTML代码
<input type="text" id="phone"/>
JS代码
$("#phone").blur(function() {
var regexp = /^[\s()+-]*([0-9][\s()+-]*){6,20}$/
var no = $("#phone").val();
if (!regexp.test(no) && no.length < 0) {
alert("Wrong phone no");
}
});
/^
[\\s]
或\\s
[(]
和[)]
。 使用\\(
和\\)
很丑陋,并且会使事情变得混乱。?
之后-
或[-]
。 但是,如果您没有将它放在一系列其他字符中的第一个或最后一个,则可能需要对其进行转义: \\-
[-.\\s]
将需要一个连字符、句点或空格。 最后一个括号后面的问号将使该插槽的所有这些都是可选的。\\d{3}
:需要 3 位数字:000-999。 [0-9][0-9][0-9]
简写。[2-9]
:该插槽需要数字 2-9。(\\+|1\\s)?
:接受一个“加号”或一个 1 和一个空格(管道字符, |
,是“或”),并将其设为可选。 “加”号必须转义。[246]
将需要 2、4 或 6。 [77|78]
将需要 77 或 78。$/
: 结束表达式这是一个长正则表达式,但它支持两种格式(例如,2 是有效的国际号码,必须以 + 或 00 开头):
/^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d?)\)?)?[\-\.\ \\\/]?)?((?:\(?\d{1,}\)?[\-\.\ \\\/]?){0,})(?:[\-\.\ \\\/]?(?:#|ext\.?|extension|x)[\-\.\ \\\/]?(\d+))?$/i
这允许扩展和多种格式和分隔符的选择。
火柴:
在 $n 上,它节省了:
这里给出了相同的答案: 电话号码验证的综合正则表达式(直接链接到我的答案)
/*
@isValidUSPhoneFormat function will check valid US Format
Allowed US Format
(123) 456-7890
123-456-7890
123.456.7890
1234567890
(734) 555.1212
*/
function isValidUSPhoneFormat(elementValue){
var phoneNumberPattern = /^[(]{0,1}[0-9]{3}[)]{0,1}[-\s.]{0,1}[0-9]{3}[-\s.]{0,1}[0-9]{4}$/;
if(phoneNumberPattern.test(elementValue) == false)
{
var phoneNumberPattern = /^(\()?\d{3}(\))?(.|\s)?\d{3}(.|\s)\d{4}$/;
return phoneNumberPattern.test(elementValue);
}
return phoneNumberPattern.test(elementValue);
}
可能这会帮助你理解 JavaScript RegEx ..
甚至不要尝试。 试图防范您认为无效的输入可能会导致无法输入完全有效电话号码的愤怒用户。 如果用户真的想输入一个无效的电话号码,他/她无论如何都可以这样做。
function checkPhoneNumber(val) {
var num = document.getElementById(val).value;
var mob=/^[+]*[(]{0,1}[0-9]{1,3}[)]{0,1}[-\s\./0-9]*$/g;
if (mob.test(num) == false) {
alert("Please Enter Valid Phone Number.");
document.getElementById(val).value = "";
return false;
}
if (num.length > 15) {
alert("Only 15 characters allowed for Phone Number field.");
document.getElementById(val).value = "";
return false;
}
return true;
}
试试吧
尝试使用libphonenumber-js包的isValidPhoneNumber(phoneNumber, countryCode)方法。 首先是以“+”开头的电话号码。 第二个参数是国家代码(例如:'US'、'IN')。 这有助于您准确验证任何国际号码。
国际电话号码的最佳库: google/libphonenumber
下面是一个 CDN 示例:
<script src="https://cdn.jsdelivr.net/npm/google-libphonenumber@3/dist/libphonenumber.min.js"></script>
// Format Phone Number
function formatPhone(p) {
var phoneUtil = libphonenumber.PhoneNumberUtil.getInstance();
var parsedPhone = phoneUtil.parse(p);
if (phoneUtil.isValidNumber(parsedPhone)) {
return phoneUtil.format(parsedPhone, libphonenumber.PhoneNumberFormat.INTERNATIONAL)
} else {
return NaN
}
}
以松散方式验证国际电话号码的更好选择如下。 这不是严格的验证
/^\s*(?:+?(\d{1,3}))?([-. (] (\d{3})[-. )] )?((\d{3})[ -. ] (\d{2,4})(?:[-.x ] (\d+))?)\s*$/gm
一个有效的 Javascript function 看起来像这样
function validatePhone(phone) { var regex = /^\s*(?:\+?(\d{1,3}))?([-. (]*(\d{3})[-. )]*)?((\d{3})[-. ]*(\d{2,4})(?:[-.x ]*(\d+))?)\s*$/gm; return regex.test(phone); } console.log(validatePhone('+973 11111111')) // true console.log(validatePhone('+973 XX77yyss')) // false
对于那些希望了解更多角色的人:
这将对以下模式和更多模式测试呈阳性
+42 555.123.4567 +1-(800)-123-4567 +7 555 1234567 +7(926)1234567 (926) 1234567 +79261234567 926 1234567 9261234567 1234567 123-12489 123-12489
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.