【问题标题】:How to check if word boundary has all zero using regex如何使用正则表达式检查单词边界是否全为零
【发布时间】:2019-03-04 16:29:47
【问题描述】:

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

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

我不想使用这个正则表达式匹配像“+00 (000) 000-0000”这样的输入。 正则表达式不应匹配“+00 (000) 000-0000”。 我试图通过使用“单词边界不应包含全零”来解决此问题,但不知道该怎么做。

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

谢谢

【问题讨论】:

  • 该输入看起来符合要求..? regex101.com/r/bBT3uF/1
  • 对不起,我的意思是正则表达式不应该匹配“+00 (000) 000-0000”。
  • 你为什么不让它变得简单呢?删除所有非数字部分\D,并检查它是否全为零^0+$
  • 您的意思是使用第二个正则表达式来删除非数字并检查全零?我正在尝试使用单个正则表达式,但不知道该怎么做
  • ^ 添加(?![0\s()+-]+$)

标签: regex


【解决方案1】:

您可以在数字旁边使用空格,()+- 符号。所以,如果你禁止字符串中只包含这些符号和0数字,就会达到你想要的效果。

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

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

请参阅regex demo

【讨论】:

    【解决方案2】:

    如果您想在电话号码全为零的情况下拒绝匹配,您可以使用正向前瞻(?=.*[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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      • 1970-01-01
      • 2011-03-28
      • 2014-06-07
      • 2012-09-24
      相关资源
      最近更新 更多