我在某些网站上找到了此代码,并且效果很好。它验证电话号码是以下格式之一: (123)456-7890 或 123-456-7890
问题是我的客户(我不知道为什么,也许是客户的东西)想添加另一种格式,即连续十个数字,如下所示: 1234567890 。
我正在使用这个正则表达式,
/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/
如何添加它还可以验证另一种格式?我对正则表达式不好。
首先,您的格式验证器显然仅适用于NANP(国家代码+1)数字。具有北美以外电话号码的人会使用您的应用程序吗?如果是这样,您就不想阻止这些人输入完全有效的[国际]号。
其次,您的验证不正确。NANP数字采用以下形式NXX NXX XXXX,其中N是数字2-9和X数字0-9。此外,区号和交换区不能采用形式N11(以两个结尾),以避免与特殊服务混淆,但非地理区号(800、888、877、866、855、900)中的数字可以进行N11交换。
NXX NXX XXXX
N
X
N11
因此,即使这不是有效的电话号码,您的正则表达式也会通过数字(123)1234566。您可以通过替换\d{3}为来解决此问题[2-9]{1}\d{2}。
\d{3}
[2-9]{1}\d{2}
最后,我感觉到您正在验证Web浏览器中的用户输入。请记住,客户端验证[只是您提供给用户的便利;您仍然需要(再次)验证服务器上的所有输入。
TL; DR 不使用正则表达式来验证复杂的实际数据,例如电话号码或URL。使用专门的库(https://github.com/googlei18n/libphonenumber)。