2016-03-07 47 views
0

我有这样的正则表达式查找电话号码的代码库:仅匹配,如果没有一个数字之前或之后

\\d{3}[\.\s-]?\d{3}[\.\s-]?\d{4}\g 

我怎么能修改此使其不会匹配情况,其中号码前面还是后面跟着一个数字?

18005555555 (should not match) 
80055555551 (should not match) 
"8005555555" (should match) 
s800-555-5555 (should match) 
8005555555 (should match) 
800.555.5555 (should match) 

编辑: 我并不想为“匹配整个单词”,因为它是不够的比赛在之前和之后一个空格。见上面的第三个例子,它也应该返回一个匹配。

我想只匹配匹配前面或后面没有数字的情况。

在别人的话:

[NOT DIGIT][PHONE NUMBER][NOT DIGIT] 
+0

以'^'和'$'附上? ['/^\d{3}[.\s-]?\d{3}[.\s-]?\d{4}$/'](https://regex101.com/r/oI4dT9/ 3) –

+0

或使用单词边界'\ b'(如果它包含在文本中) –

+0

请参阅上面的我的编辑。 – Himmel

回答

1

前瞻和回顾后会帮助你与这些限制 - 如果他们的支持,像

/(?<!\d)\d{3}[.\s-]?\d{3}[.\s-]?\d{4}(?!\d)/g 

您可以(?:^|\D)更换回顾后(?<!\d)如果不是支持的。如果不支持,您可以用(?:\D|$)替代lookahead (?!\d)

你可以在这里找到一个演示:https://regex101.com/r/aS8jQ8/1

相关问题