Regex 这个正则表达式可以简化吗?
我有一个正则表达式:Regex 这个正则表达式可以简化吗?,regex,Regex,我有一个正则表达式: ^(\(\d{3}\)[ ]?\d{3}-\d{4})|(\d{3}\.\d{3}\.\d{4})|(\d{3}\-\d{3}\-\d{4})|[0-9]{10}$ 我只需要这些电话号码格式来匹配: (555)555-5555 (555)555-5555 555-555-5555 555.555.5555 55555555 有没有办法简化我当前的正则表达式?RegexBuddy显示: \(?\b[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{
^(\(\d{3}\)[ ]?\d{3}-\d{4})|(\d{3}\.\d{3}\.\d{4})|(\d{3}\-\d{3}\-\d{4})|[0-9]{10}$
我只需要这些电话号码格式来匹配:
- (555)555-5555
- (555)555-5555
- 555-555-5555
- 555.555.5555
- 55555555
\(?\b[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}\b
RegexBuddy显示:
\(?\b[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}\b
就个人而言,我不会费心验证用户的格式。在某些情况下,你的任何想法都可能失败。我认为最好是接受更宽松的输入,并尽最大努力纠正错误 老实说,当您只需要10位数字时,谁会关心
()
、-
和
?您可以轻松地在后端添加格式
相反,我会这样做
// ugly user input, but still valid
var userInput = "(500) 423.2345";
// remove all non-digits
var phone = userInput.replace(/\D/g, '');
//=> "5004232345"
// verify that 10 digits are present
if (phone.length !== 10) {
alert("invalid phone number");
}
然后你可以用你想要的任何格式储存号码
// example
[
"(",
phone.substr(0,3),
")",
phone.substr(3,3),
"-",
phone.substr(6,4)
].join(" ")
// "( 500 ) 423 - 2345"
就个人而言,我不会费心验证用户的格式。在某些情况下,你的任何想法都可能失败。我认为最好是接受更宽松的输入,并尽最大努力纠正错误 老实说,当您只需要10位数字时,谁会关心
()
、-
和
?您可以轻松地在后端添加格式
相反,我会这样做
// ugly user input, but still valid
var userInput = "(500) 423.2345";
// remove all non-digits
var phone = userInput.replace(/\D/g, '');
//=> "5004232345"
// verify that 10 digits are present
if (phone.length !== 10) {
alert("invalid phone number");
}
然后你可以用你想要的任何格式储存号码
// example
[
"(",
phone.substr(0,3),
")",
phone.substr(3,3),
"-",
phone.substr(6,4)
].join(" ")
// "( 500 ) 423 - 2345"
如果使用捕获组捕获分隔符,使用反向引用重新使用分隔符,则可以稍微简化并避免几种替代方法:
^(?:\(\d{3}\) ?\d{3}-\d{4}|\d{3}([.-]?)\d{3}\1\d{4})$
如果使用捕获组捕获分隔符,使用反向引用重新使用分隔符,则可以稍微简化并避免几种替代方法:
^(?:\(\d{3}\) ?\d{3}-\d{4}|\d{3}([.-]?)\d{3}\1\d{4})$
如果你想要严格,那就保持原样吧。@hwnd我相信你是对的。我对regex还是新手,所以我想在加入之前先和一些so大师核实一下。谢谢。我希望您没有尝试验证电话号码字段。处理电话号码的正确方法是去掉非数字字符,然后计算数字序列。@zzzzBov这是用于RESTful API的。我正在验证请求正文中的一个元素。如果您希望严格,请保持原样。@hwnd我相信您是对的。我对regex还是新手,所以我想在加入之前先和一些so大师核实一下。谢谢。我希望您没有尝试验证电话号码字段。处理电话号码的正确方法是去掉非数字字符,然后计算数字序列。@zzzzBov这是用于RESTful API的。我正在验证请求正文中的一个元素。感谢您的回答,但某些匹配项不会通过。我需要一个严格的匹配,只有上述格式。我不能把“.”和“-”混在一起。谢谢你的回答,但某些匹配项不应该混在一起。我需要一个严格的匹配,只有上述格式。我不能把“.”和“-”混在一起。。。