1

要查看我想要的内容,请查看我正在使用的正则表达式。我会尽量用英文解释。我想匹配4444or444444444444-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我想排除。

4

2 回答 2

1

您应该能够使用反向引用来做到这一点:

^(?:\d{3}(-?)\d{2}\1)?\d{4}$

如果 a-存在,它会被捕获并且可以用 来引用\1。如果它不存在,\1将只是空的。所以它本质上意味着:如果-在那个位置,它也必须在另一个位置。

演示

于 2012-04-05T18:02:00.200 回答
0

标记为实际答案的模式失败,因为它与有效 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) 匹配无效器 (?!) 中描述了匹配无效器的使用。

于 2012-04-05T19:17:05.087 回答