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
有没有办法简化我当前的正则表达式?RegexBuddy显示:

\(?\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的。我正在验证请求正文中的一个元素。感谢您的回答,但某些匹配项不会通过。我需要一个严格的匹配,只有上述格式。我不能把“.”和“-”混在一起。谢谢你的回答,但某些匹配项不应该混在一起。我需要一个严格的匹配,只有上述格式。我不能把“.”和“-”混在一起。。。