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

问题是我的客户端(我不知道为什么,可能是客户端)想要添加另一种格式,连续的十个数字,像这样:1234567890。

我用这个正则表达式,

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

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


当前回答

试试这个

/^(\+{0,})(\d{0,})([(]{1}\d{1,3}[)]{0,}){0,}(\s?\d+|\+\d{2,3}\s{1}\d+|\d+){1}[\s|-]?\d+([\s|-]?\d+){1,2}(\s){0,}$/gm

有效的格式

(123) 456-7890 (123)456-7890 The 123-456-7890 1234567890 + 31636363634 +3(123) 123-12-12 + 3 (123) 123-12-12 + 3 (123)1231212 +3(123) 12312123 Plus 3(123), 123, 12, 12 075-63546725 +7910 120 54 54 910 120 54 54 8 999 999 99 99

https://regex101.com/r/QXAhGV/1

其他回答

我要做的是忽略格式并验证数字内容:

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);
}

试试这个

/^(\+{0,})(\d{0,})([(]{1}\d{1,3}[)]{0,}){0,}(\s?\d+|\+\d{2,3}\s{1}\d+|\d+){1}[\s|-]?\d+([\s|-]?\d+){1,2}(\s){0,}$/gm

有效的格式

(123) 456-7890 (123)456-7890 The 123-456-7890 1234567890 + 31636363634 +3(123) 123-12-12 + 3 (123) 123-12-12 + 3 (123)1231212 +3(123) 12312123 Plus 3(123), 123, 12, 12 075-63546725 +7910 120 54 54 910 120 54 54 8 999 999 99 99

https://regex101.com/r/QXAhGV/1

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

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

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

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

TL;DR不使用正则表达式来验证复杂的现实数据,如电话号码或url。使用专门的库。

我使用了@marty提供的一个,并对它进行了一些修改,以适应更多的情况:

/^[\+]?([0-9][\s]?|[0-9]?)([(][0-9]{3}[)][\s]?|[0-9]{3}[-\s\.]?)[0-9]{3}[-\s\.]?[0-9]{4,6}$/im

有效的格式:

+1 123 4567890 + 11234567890 + 1 (123)4567890 + 1 (123)456-7890 +1 (123) 456-7890 +1 (123)456 7890 +1 123 456-7890 +1 123 456 7890 +1 123-456-7890 The 123-456-7890 123 456-7890 123 456 7890 123 4567890 1234567890

我不得不承认,核实电话号码是一项艰巨的任务。 至于这个具体的问题,我会改变正则表达式从

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

to

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

因为唯一多余的元素是最后的破折号/空格。