如何使用正则表达式检查单词边界是否全为零

问题描述 投票:1回答:2

我正在编写正则表达式来验证联系电话。我正在使用以下正则表达式进行验证:

^(?!\b(0)\1+\b)(?!(-))([+]?(\d{1,3})?[\s.-]?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$)

我不想使用此正则表达式匹配“+00(000)000-0000”之类的输入。正则表达式不应与“+00(000)000-0000”匹配。我试图通过使用“字边界不应该包含所有零”来解决这个问题,但不知道如何做到这一点。

请建议如何解决这个问题。任何指针都会有帮助。

谢谢

regex
2个回答
0
投票

你有数字旁边允许的空格,()+-符号。因此,如果您禁止字符串仅包含这些符号和0数字,您将获得所需的效果。

(?![0\s()+-]+$)之后添加^负向前瞻,以便它可以在字符串的最开始处执行。

^(?![0\s()+-]+$)(?!-)([+]?(\d{1,3})?[\s.-]?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$)

regex demo


0
投票

如果您想要拒绝匹配,如果电话号码全部为零,您可以使用正向前看强制存在非零数字(?=.*[1-9])

^(?=.*[1-9])(?!-)([+]?(\d{1,3})?[\s.-]?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$)
 ^^^^^^^^^^^ This ensures the number have at least one non-zero number

Demo

© www.soinside.com 2019 - 2024. All rights reserved.