使用 JavaScript 验证电话号码

2022-08-30 01:13:53

我在一些网站上找到了这个代码,它工作得很好。它验证电话号码是否采用以下格式之一:
(123) 456-7890123-456-7890

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

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

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

如何添加它也验证了另一种格式?我不擅长正则表达式。


答案 1

我选择的正则表达式是:

/^[\+]?[(]?[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


答案 2

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

其次,您的验证不正确。NANP 数字采用数字 2-9 和数字 0-9 的形式。此外,区号和交换可能不采取该形式(以两个结尾),以避免与特殊服务混淆,但非地理区域代码中的数字(800,888,877,866,855,900)中的数字可以交换。NXX NXX XXXXNXN11N11

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

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

TL;DR 不使用正则表达式来验证复杂的真实世界数据,如电话号码URL。使用专用库