首先,您的格式验证器显然仅适用于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)。



