一尘不染

使用JavaScript验证电话号码

javascript

我在某些网站上找到了此代码,并且效果很好。它验证电话号码是以下格式之一:
(123)456-7890123-456-7890

问题是我的客户(我不知道为什么,也许是客户的东西)想添加另一种格式,即连续十个数字,如下所示: 1234567890

我正在使用这个正则表达式,

/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/

如何添加它还可以验证另一种格式?我对正则表达式不好。


阅读 560

收藏
2020-04-25

共1个答案

一尘不染

首先,您的格式验证器显然仅适用于NANP(国家代码+1)数字。具有北美以外电话号码的人会使用您的应用程序吗?如果是这样,您就不想阻止这些人输入完全有效的[国际]号。

其次,您的验证不正确。NANP数字采用以下形式NXX NXX XXXX,其中N是数字2-9和X数字0-9。此外,区号和交换区不能采用形式N11(以两个结尾),以避免与特殊服务混淆,但非地理区号(800、888、877、866、855、900)中的数字可以进行N11交换。

因此,即使这不是有效的电话号码,您的正则表达式也会通过数字(123)1234566。您可以通过替换\d{3}为来解决此问题[2-9]{1}\d{2}

最后,我感觉到您正在验证Web浏览器中的用户输入。请记住,客户端验证[只是您提供给用户的便利;您仍然需要(再次)验证服务器上的所有输入。

TL; DR
不使用正则表达式来验证复杂的实际数据,例如电话号码或URL。使用专门的库(https://github.com/googlei18n/libphonenumber)。

2020-04-25