Regex SSN和9号筛选问题

Regex SSN和9号筛选问题,regex,Regex,此正则表达式以多种格式查找社会保险号码(SSN),但它也忽略了明显无效的SSN,如123-45-6789或000-00-0000等 此表达式应找到一个社会保险号码,该号码: 包含任何非数字分隔符(即####-#-#-####, ############,或###########) 它还应该捕获9位数字 不带分隔符,但以空格(即“文本”)为界的序列 ###文本,或 此表达式将忽略任何特定组(即000-##-##-####,##-00-####,或#########) 以666开始 以900-99

此正则表达式以多种格式查找社会保险号码(SSN),但它也忽略了明显无效的SSN,如123-45-6789或000-00-0000等

此表达式应找到一个社会保险号码,该号码:

  • 包含任何非数字分隔符(即
    ####-#-#-####
    ############
    ,或
    ###########
  • 它还应该捕获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}$