我在一些网站上找到了这个代码,它工作得很完美。它验证电话号码是以下格式之一: (123) 456-7890或123-456-7890
问题是我的客户端(我不知道为什么,可能是客户端)想要添加另一种格式,连续的十个数字,像这样:1234567890。
我用这个正则表达式,
/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/
我如何添加它也验证另一种格式?我不擅长使用正则表达式。
我在一些网站上找到了这个代码,它工作得很完美。它验证电话号码是以下格式之一: (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形式(以两个1结尾),以避免与特殊服务混淆,除非非地理区号(800,888,877,866,855,900)中的号码可以有N11交换机。
因此,您的正则表达式将传递数字(123)123 4566,即使这不是一个有效的电话号码。你可以通过用[2-9]{1}\d{2}替换\d{3}来解决这个问题。
最后,我感觉你是在web浏览器中验证用户输入。请记住,客户端验证只是您为用户提供的便利;您仍然需要(再次)验证服务器上的所有输入。
TL;DR不使用正则表达式来验证复杂的现实数据,如电话号码或url。使用专门的库。
其他回答
我建议使用一些更清晰的东西(特别是考虑到谁必须维护代码)……是什么:
var formats = "(999)999-9999|999-999-9999|9999999999";
var r = RegExp("^(" +
formats
.replace(/([\(\)])/g, "\\$1")
.replace(/9/g,"\\d") +
")$");
regexp是从一个清晰的模板构建的?添加一个新的将是一个无需动脑,甚至可能是客户自己可以做到这一点,在“选项”页面。
试试这个正则表达式
/[^0-9+() -.]/g
使用的例子:
<input type="tel" id="txtUserMobile" onkeyup="this.value=this.value.replace(/[^0-9+() -.]/g,'')">
享受
下面的REGEX将验证这些格式中的任何一个:
(123) 456-7890 The 123-456-7890 123.456.7890 1234567890
/^[(]{0,1}[0-9]{3}[)]{0,1}[-\s\.]{0,1}[0-9]{3}[-\s\.]{0,1}[0-9]{4}$/
正则表达式
使用以下Regex模式:
/^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/im
这样的:<输入模式 ="/^[\+]?[(]?[ 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
试试这个
/^(\+{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