您如何“不”在正则表达式中允许非空格?

时间:2019-10-04 14:30:19

标签: regex validation

我目前正忙于荷兰电话号码验证,该验证仅允许以下模式:

  

注意:n代表数字。

nn-123
nn-12345678

nnn-1234567

nnnn-1234
nnnn-123456
nnnn-1234567
     

注意:也可以使用空格代替破折号。

问题是我的正则表达式也允许使用非空格,但是它只能允许使用破折号或空格。

到目前为止,这是我的正则表达式代码:

 /^([0-9]{3}[- ]?([0-9]{3}|[0-9]{7})|[0-9]{2}[- ]?([0-9]{3}|[0-9]{8})|[0-9]{4}[- ]?([0-9]{4}|[0-9]{6}|[0-9]{7})|[0-9]{3}[- ]?([0-9]{7}))$

编辑:为澄清起见,这是我的问题的一个示例:

允许的一些电话号码示例:

  06-12345678
  0800 1234
  425-1234567

不允许的电话号码示例:

  1234567890 (My regex sadly allows this number)

2 个答案:

答案 0 :(得分:1)

像这样吗?

\d{2,4}[-, \s]\d{3,}

不太确定您的要求是什么,但这可以通过以下方式进行:

  • 它将匹配2到4个数字字符
  • 先前匹配的数字字符后必须带有破折号或空格字符
  • 破折号或空格字符后必须至少3个数字字符

如果这对您不起作用,请提供您所需的所有特定限制/要求。

修改,regex101:

https://regex101.com/r/uVwAK1/1

我用数字1替换了“ n”个字符。

答案 1 :(得分:1)

要匹配这些格式,您可以使用替换|和字符类[- ],但不要使其成为可选。

部分

^(?:[0-9]{2}[- ](?:[0-9]{8}|[0-9]{3})|[0-9]{3}[ -][0-9]{7}|[0-9]{4}[ -](?:[0-9]{6,7}|[0-9]{4}))$
  • ^字符串的开头
  • (?:非捕获组
    • [0-9]{2}[- ]匹配2位数字和空格或连字符
    • (?:非捕获组
      • [0-9]{8}匹配8位数字
      • |
      • [0-9]{3}匹配3位数字
    • )关闭群组
    • |
    • [0-9]{3}[ -][0-9]{7}匹配3位数字,空格或连字符和7位数字
    • |
    • [0-9]{4}[ -]匹配4位数字和空格或连字符
    • (?:
      • [0-9]{6,7}匹配6-7位数字
      • |
      • [0-9]{4}匹配4位数字
    • )关闭群组
  • )关闭群组
  • $字符串结尾

Regex demo