(123) 456-7890 或 123-456-7890
问题是我的客户(我不知道为什么,可能是客户的事情)想要添加另一种格式,即连续十个数字,类似于这样:1234567890。
我正在使用这个正则表达式:
/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/
我该如何添加验证另一种格式的代码?我不擅长正则表达式。
问题是我的客户(我不知道为什么,可能是客户的事情)想要添加另一种格式,即连续十个数字,类似于这样:1234567890。
我正在使用这个正则表达式:
/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/
我该如何添加验证另一种格式的代码?我不擅长正则表达式。
我选择的正则表达式是:
/^[\+]?[(]?[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
i
可以使表达式不区分大小写,而m
可以执行多行搜索。 - Rodrigo Leite^
和结尾的 $
,它也可以在字符串中间找到电话号码。 - hobberwickey首先,你的格式验证器显然只适用于NANP(国家代码+1)号码。你的应用程序将由来自北美以外地区的用户使用吗?如果是,你不希望阻止这些人输入完全有效的[国际]号码。
其次,你的验证是不正确的。NANP号码采用NXX NXX XXXX
的形式,其中N
是数字2-9,X
是数字0-9。此外,区号和交换机不能采用N11
的形式(以两个“1”结尾),以避免与特殊服务混淆,除了非地理区号(800、888、877、866、855、900)的号码可以具有N11
交换机。
因此,你的正则表达式将通过号码(123) 123 4566,即使那不是一个有效的电话号码。你可以通过将\d{3}
替换为[2-9]{1}\d{2}
来解决这个问题。
最后,在我看来,你正在web浏览器中验证用户输入。请记住,客户端验证只是你提供给用户的便利;你仍然需要在服务器上重新验证所有输入。
简而言之:不要使用正则表达式来验证复杂的真实世界数据,如电话号码或URLs。使用专门的库。
如果您只需要查找 10 个数字,那么忽略除数字以外的所有内容 -
return value.match(/\d/g).length===10;
return value.replace(/\D/g,'').length == 10
,其中 \D
匹配非数字字符。 - RobG/\D/gi.test(value)
。 包括空格、破折号等在内的所有非数字字符... - Gus/^[+]*[(]{0,1}[0-9]{1,3}[)]{0,1}[-\s\./0-9]*$/g
(123) 456-7890
+(123) 456-7890
+(123)-456-7890
+(123) - 456-7890
+(123) - 456-78-90
123-456-7890
123.456.7890
1234567890
+31636363634
075-63546725
这是一种非常灵活的选择,我更喜欢保持它原来的方式,因为我通常在注册表单中使用它,用户需要添加他们的电话号码。 通常情况下,用户会对强制执行严格格式规则的表单感到困惑,我更喜欢让用户填写号码,然后在显示之前或保存到数据库之前进行格式化。 http://regexr.com/3c53v
+41 (79) 123 45 67
(瑞士):/^[+]?[\s./0-9]*[(]?[0-9]{1,4}[)]?[-\s./0-9]*$/g
- Remigius Stalder/^[+]*[(]{0,1}[0-9]{1,3}[)]{0,1}[-\s\./0-9]{8,14}$/g
- kuzey beytar我会忽略格式,而验证数字内容:
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);
}
以下正则表达式可以验证下列任意格式:
(123) 456-7890
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}$/
.
,否则它将匹配任意字符,使你的正则表达式失效。 - Christophstr可以是以下任何一种格式:
555-555-5555 (555)555-5555 (555) 555-5555 555 555 5555 5555555555 1 555 555 5555function telephoneCheck(str) {
var isphone = /^(1\s|1|)?((\(\d{3}\))|\d{3})(\-|\s)?(\d{3})(\-|\s)?(\d{4})$/.test(str);
alert(isphone);
}
telephoneCheck("1 555 555 5555");
我建议使用更加清晰的方式(尤其是考虑到谁将来会维护这段代码)......怎么样:
var formats = "(999)999-9999|999-999-9999|9999999999";
var r = RegExp("^(" +
formats
.replace(/([\(\)])/g, "\\$1")
.replace(/9/g,"\\d") +
")$");
正则表达式是从一个清晰的模板构建的吗?这样添加新的正则表达式将变得非常简单,甚至客户自己也能够在“选项”页面上完成。
试试这个 - 它还包括国际格式的验证。
/^[+]?(1\-|1\s|1|\d{3}\-|\d{3}\s|)?((\(\d{3}\))|\d{3})(\-|\s)?(\d{3})(\-|\s)?(\d{4})$/g
此正则表达式验证以下格式:
使用以下正则表达式模式:
/^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/im
像这样:<input pattern="/^ [\+] ? [(] ? [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