Regex SSN和9号筛选问题
此正则表达式以多种格式查找社会保险号码(SSN),但它也忽略了明显无效的SSN,如123-45-6789或000-00-0000等 此表达式应找到一个社会保险号码,该号码:Regex SSN和9号筛选问题,regex,Regex,此正则表达式以多种格式查找社会保险号码(SSN),但它也忽略了明显无效的SSN,如123-45-6789或000-00-0000等 此表达式应找到一个社会保险号码,该号码: 包含任何非数字分隔符(即####-#-#-####, ############,或###########) 它还应该捕获9位数字 不带分隔符,但以空格(即“文本”)为界的序列 ###文本,或 此表达式将忽略任何特定组(即000-##-##-####,##-00-####,或#########) 以666开始 以900-99
- 包含任何非数字分隔符(即
,####-#-#-####
,或############
)###########
- 它还应该捕获9位数字 不带分隔符,但以空格(即“文本”)为界的序列 ###文本<代码>,或
- 此表达式将忽略任何特定组(即
,000-##-##-####
,或##-00-####
)#########
- 以
666开始
- 以
900-999中的任意值开始
- 等于
(由于伍尔沃思钱包的惨败)078-05-1120
- 等于
(出现在社保广告中 行政管理)219-09-9999
- 包含所有匹配值(即
,000-00-0000
,111-11-1111
等)222-22-2222
- 包含所有递增值(即
)123-45-6789
任何想法?您可以使用
\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}$
这篇文章可能会有帮助:
本文还提供了一个更为全面的解决方案,这可能正是您想要的:
^(?!\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}$
那么分隔符只用于破折号和空格呢?我想知道这是否有助于筛选出我们目前正在捕获的某些内容是的,
\D
分隔符非常通用。对于所有出现的\D?
,仅匹配单个空格或单个-
字符的替代方法是将\D?
替换为[-]?
。
^(?!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}$
^(?!\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}$