我正在寻找一个能够匹配任何这些电话号码格式的正则表达式,但仅限于这些格式。例如,(999-999-999应该不起作用。我知道如何使用?对于可选,但是我希望第二个)只有当数字以(,和第二个)开头时,如果数字不是可选的,则必须是强制性的不能以a开头(。无论哪里有黑色空格,都可以有无限数量的空格。(999)999-999有效,但(999)999-9999不是
999-999-9999
999 999 9999
999 999-9999
9999999999
999 9999999
(999) 999-9999
(999) 999 9999
答案 0 :(得分:0)
我建议你自己买这本书:
如果你正在努力争取这样一个基本的正则表达式(在网上几乎可以找到它)。这是一本食谱,意味着解决方案可以像书中一样直接使用。
从第249页起:
^\(?([0-9]{3})\)?[- ]?([0-9]{3})[- ]?([0-9]{4})
您有三个捕获组:
第1和第2 ([0-9]{3})
第3 ([0-9]{4})
您可以使用这些捕获组返回电话号码的不同部分。使用非捕获组(?:)
来提高性能(在该上下文中除非您使用循环,否则不需要)。
如果是可选括号\(?
和\)?
。
您需要转义括号,因为它用于在regex中进行分组。问号(?)使前面的元素或组可选。
使用[- ]?
在数字序列之间选择空格和连字符。
附加说明:这是一个非常通用的正则表达式,因此它应该与任何编程语言兼容。
因此,您应该知道该事件虽然正则表达式的一般结构几乎相同,但是对于更高级/高级功能的不同语言实现之间存在显着差异。
下次,您还应该指定您想要正则表达式的编程语言(例如:PHP,Javascript等)