正则表达式模式与我的字符串不匹配

时间:2018-04-22 22:04:48

标签: regex

如何在正则表达式下重写

/((?:\+|00)[17](?: |\-)?|(?:\+|00)[1-9]\d{0,2}(?: |\-)?|(?:\+|00)1\-\d{3}(?: |\-)?)?(0\d|\([0-9]{3}\)|[1-9]{0,3})(?:((?: |\-)[0-9]{2}){4}|((?:[0-9]{2}){4})|((?: |\-)[0-9]{3}(?: |\-)[0-9]{4})|([0-9]{7}))/g

与此模式匹配

+1(555)532-3455

2 个答案:

答案 0 :(得分:0)

对于匹配该字符串,您的表达似乎不必要地复杂化。您正在尝试匹配以下方面:

  • 带有国家/地区代码的加号
  • 用括号括起来的区号
  • 电话号码的前3位数字
  • 短划线
  • 电话号码的最后4位数字
  • 任何地方都没有空格

要匹配此项,您只需要

^\+[0-9]\([0-9]{3}\)[0-9]{3}\-[0-9]{4}$

如果您需要在国家/地区代码,区号和电话号码之间留出可选空格,您可以将它们添加到表达式中。

^\+[0-9]\s?\([0-9]{3}\)\s?[0-9]{3}\-[0-9]{4}$

(我可能在那里有不必要的转义\

答案 1 :(得分:0)

或者你可以这样做:

^\+?\d(?:\s*(?:\(|\-)?\s*)\d{3}(?:\s*(?:\)|\-)?\s*)(?:\d{3}(?:\s*\-?\s*)?\d{4})$

有关此正则表达式可以匹配和不匹配的一些示例,请参阅regex demo