此正则表达式正在寻找多种格式的社会安全号码(SSN),但它也忽略了明显无效的SSN,如123-45-6789或000-00-0000等。
此表达式应找到以下社会安全号码:
###-##-####
,
###.##.####
或### ### ####
), or
### ######### ###`)000-##-####
,###-00-####
或###-##-0000
)666
900-999
078-05-1120
(由于Woolworth&#Wallet Fiasco)219-09-9999
(出现在社会保障广告中
给药)000-00-0000
,111-11-1111
,222-22-2222
等。)123-45-6789
)正则表达式
(@"(?!\b(\d)\1+\D?(\d)\1+\D?(\d)\1+\b)(?!123\D?45\D?6789|219\D?09\D?9999|078\D?05\D?1120)(?!666|000|9\d{2})(?<!\d)\d{3}\D?(?!00)\d{2}\D?(?!0{4})\d{4}(?!\d)(?<!\d{5}-\d{4})",
问题是我们捕获的其他条目类似于那些但我们需要足够具体,这些条目都没有被抓住。
如 -
(xxxx) xxx-xx-xxxx
684072943 (and order number etc.)
FA300217F0090
Potential Match #1:--------------- nt: ex: 201[[71230 0821]] am ex: 201[[71230 0821]] am 26 JUNE 2012 ---------------Potential Match #2:--------------- am ex: 201[[71230 0821]] am 26 JUNE 2012 DTG (date time group)
"[[ 210v13:2012]],"
有什么想法吗?
答案 0 :(得分:0)
您可以使用\D?
匹配任何非数字作为分隔符。这将是一个更简化的SSN验证器:
^(?!219\D?09\D?9999|078\D?05\D?1120)(?!666|000|9\d{2})d{3}\D?(?!00)\d{2}\D?(?!0{4})\d{4}$
这篇文章可能会有帮助:http://rion.io/2013/09/10/validating-social-security-numbers-through-regular-expressions-2/
该文章还提供了一个更加过分的解决方案,可能正是您所寻找的:
^(?!\b(\d)1+\D?(\d)1+\D?(\d)1+\b)(?!123\D?45\D?6789|219\D?09\D?9999|078\D?05\D?1120)(?!666|000|9d{2})\d{3}\D?(?!00)\d{2}\D?(?!0{4})\d{4}$