要查看我想要的内容,请查看我正在使用的正则表达式。我会尽量用英文解释。我想匹配4444
or444444444
或444-44-4444
。这就是我所拥有的,它可以满足我的需求。
^[0-9]{9}$|^[0-9]{4}$|^[0-9]{3}-[0-9]{2}-[0-9]{4}$
没有 OR 有没有办法做到这一点?我想过这样做
([0-9]{3}-?[0-9]{2}-?)?[0-9]{4}
但这允许222-222222
我想排除。
要查看我想要的内容,请查看我正在使用的正则表达式。我会尽量用英文解释。我想匹配4444
or444444444
或444-44-4444
。这就是我所拥有的,它可以满足我的需求。
^[0-9]{9}$|^[0-9]{4}$|^[0-9]{3}-[0-9]{2}-[0-9]{4}$
没有 OR 有没有办法做到这一点?我想过这样做
([0-9]{3}-?[0-9]{2}-?)?[0-9]{4}
但这允许222-222222
我想排除。
您应该能够使用反向引用来做到这一点:
^(?:\d{3}(-?)\d{2}\1)?\d{4}$
如果 a-
存在,它会被捕获并且可以用 来引用\1
。如果它不存在,\1
将只是空的。所以它本质上意味着:如果-
在那个位置,它也必须在另一个位置。
标记为实际答案的模式失败,因为它与有效 SSN 号码的美国规范不匹配!
使用匹配无效器,此模式有效,并根据政府规范社会安全号码随机化抛出 000 和 666 或以 9xx 开头的数字
# To use this regex pattern specify IgnoreWhiteSpace due to these comments.
^ # Beginning of line anchor
(?!9) # Can't be 900- 999
(?!000) # If it starts with 000 its bad (STOP MATCH!)
(?!666) # If it starts with 666 its bad (STOP MATCH!)
(?<FIRST>\d{3}) # Match the First three digits and place into First named capture group
(?:[\s\-]?) # Match but don't capture a possible space or dash
(?<SECOND>\d\d) # Match next two digits
(?:[\s-]?) # Match but don't capture a possible space or dash
(?<THIRD>\d{4}) # Match the final for digits
$ # EOL anchor
我在我的博客文章.Net 中的正则表达式 (Regex) 匹配无效器 (?!) 中描述了匹配无效器的使用。