仅匹配括号与结束

时间:2016-11-16 20:52:05

标签: regex

我做了一个正则表达式来匹配这些电话号码:

555-555-5555
(555)555-5555
(555) 555-5555
555 555 5555
5555555555
1 555 555 5555

有效。但我不想匹配没有右括号的数字:

555) 555-5555

这是我的正则表达式:

^(1{1})?(\ |-)?(\()?([0-9]{3})(\ |\)|\-)?(\ |\)|\-)?([0-9]{3})(\ |-)?([0-9]{4})$

我该怎么做?

3 个答案:

答案 0 :(得分:0)

您的正则表达式应用于哪种类型的内容?

因为您可能有不同的解决方案。

如果您所在的字段仅包含电话号码,并且想要验证它们,则可以从除数字之外的所有字符开始,并且具有很好的值来处理。

答案 1 :(得分:0)

您必须同时支持括号:

(\(\d{3}\)|\d{3})

所有在一起:

^1?[ -]?(\(\d{3}\)|\d{3})[ -]?\d{3}[ -]?\d{4}$

...删除了不必要的括号,添加了更简单的字符类。

请参阅demo

答案 2 :(得分:0)

只是把我的两分钱放在:

(?:(?=\(\d+\))|(?!.*\)))
^[\d- ()]+$

请参阅a demo on regex101.com 或者,在匹配之前,只需将()替换为空。