要查看我想要的内容,请查看我正在使用的正则表达式。我会用英语解释一下。
我想匹配4444
或444444444
或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
。
答案 0 :(得分:1)
你应该可以通过反向引用来做到这一点:
^(?:\d{3}(-?)\d{2}\1)?\d{4}$
如果存在-
,则会捕获该\1
,并可以使用\1
引用该-
。如果它不存在,{{1}}将为空。所以它实质上意味着:如果{{1}}在那个位置,它也必须在另一个位置。
答案 1 :(得分:0)
标记为答案实际的模式失败,因为它与美国规范的有效SSN号码不匹配!
使用匹配无效器,此模式可以工作,并根据政府规范Social Security Number Randomization
抛出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
我在博客文章Regular Expression (Regex) Match Invalidator (?!) in .Net上描述了匹配无效器的使用。