我在一些网站上找到了这个代码,它工作得很完美。它验证电话号码是以下格式之一: (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}$/
我如何添加它也验证另一种格式?我不擅长使用正则表达式。
当前回答
我建议使用一些更清晰的东西(特别是考虑到谁必须维护代码)……是什么:
var formats = "(999)999-9999|999-999-9999|9999999999";
var r = RegExp("^(" +
formats
.replace(/([\(\)])/g, "\\$1")
.replace(/9/g,"\\d") +
")$");
regexp是从一个清晰的模板构建的?添加一个新的将是一个无需动脑,甚至可能是客户自己可以做到这一点,在“选项”页面。
其他回答
- ^ (() \ d {3} (?) (s - | \) ? d {3} (- | \ s) ?\ d{4} -美元
的吗?字符表示前一组匹配0次或1次。组(-|\s)将匹配-或|字符。
阿根廷数据的RegExp: / ^((+[0 - 9]{1,3})) ?(([0 - 9]{8、13})|([0 - 9]{3、6})——([0 - 9]{4 7}))/美元
Valids:
X: from 8 to 13 numbersXXXXXXXX
separate numbers by a hyphen = X from 3 to 6; Y: from 4 to 7XXXX-YYYY
Z: from 1 to 3(+ Z) XXXXXXXX
if you use Z then (+ ) is mandatory.试试这个正则表达式
/[^0-9+() -.]/g
使用的例子:
<input type="tel" id="txtUserMobile" onkeyup="this.value=this.value.replace(/[^0-9+() -.]/g,'')">
享受
首先,格式验证器显然只适用于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。使用专门的库。
验证电话号码+返回格式化数据
函数有效电话(str){ str = str.replace(/[^0-9]/g, ''); var l = 尺寸长度; if(l<10) 返回 ['错误', '电话号码长度< 10']; var tel = '', num = str.substr(-7), 代码 = str.substr(-10, 3), coCode = ''; if(l>10) { coCode = '+' + str.substr(0, (l-10) ); } tel = coCode +' ('+ code +') '+ num; 返回 [“成功”,电话]; } console.log(validTel('+1 [223] 123.45.67'));