我在一些网站上找到了这段代码,它运行良好。它验证电话号码是否采用以下格式之一:
(123) 456-7890或123-456-7890
问题是我的客户(我不知道为什么,也许是客户的东西)想要添加另一种格式,连续十个数字,如下所示:1234567890。
我正在使用这个正则表达式,
/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/
我如何添加它也验证另一种格式?我不擅长正则表达式。
我在一些网站上找到了这段代码,它运行良好。它验证电话号码是否采用以下格式之一:
(123) 456-7890或123-456-7890
问题是我的客户(我不知道为什么,也许是客户的东西)想要添加另一种格式,连续十个数字,如下所示:1234567890。
我正在使用这个正则表达式,
/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/
我如何添加它也验证另一种格式?我不擅长正则表达式。
我选择的正则表达式是:
/^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/im
有效格式:
(123) 456-7890
(123)456-7890
123-456-7890
123.456.7890
1234567890
+31636363634
075-63546725
首先,您的格式验证器显然只适用于NANP(国家代码 +1)数字。拥有北美以外电话号码的人会使用您的应用程序吗?如果是这样,您不想阻止这些人输入完全有效的 [国际] 号码。
其次,您的验证不正确。NANP 数字采用以下形式NXX NXX XXXX
,其中N
是 2-9 位数字和X
0-9 位数字。此外,N11
为了避免与特殊服务混淆,区号和交换可能不会采用(以两个结尾)形式,但非地理区号(800、888、877、866、855、900)中的数字可能有N11
交换。
因此,您的正则表达式将传递号码 (123) 123 4566,即使该号码不是有效的电话号码。您可以通过替换\d{3}
为[2-9]{1}\d{2}
.
最后,我感觉您正在验证 Web 浏览器中的用户输入。请记住,客户端验证只是您提供给用户的一种便利;您仍然需要(再次)验证服务器上的所有输入。
TL;DR不使用正则表达式来验证复杂的现实世界数据,如电话号码或URL。使用专门的库。
如果您正在寻找 10 位且只有 10 位数字,请忽略除数字以外的所有内容-
return value.match(/\d/g).length===10;
/^[+]*[(]{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
这是一个非常宽松的选项,我更喜欢保持这种方式,主要是我在用户需要添加电话号码的注册表中使用它。通常用户对强制执行严格格式规则的表单有困难,我更喜欢用户在显示中或在将其保存到数据库之前填写数字和格式。 http://regexr.com/3c53v
我要做的是忽略格式并验证数字内容:
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);
}