多重负面预测 - 美国SSN

时间:2014-05-22 08:57:36

标签: regex

您好我正在编写一个正则表达式来验证具有以下条件的美国SSN:

  1. 所有数字相同
  2. 123456789或987654321
  3. 前三位数字是000或666
  4. 中间两位数字为00或后四位数字为0000
  5. 我目前正在使用此正则表达式来实现这些标准。

     ^(?!(\d)\1{8})(?!123456789)(?!987654321)(?!0{3})(?!6{3})(?!\d{3}0{2}\d{4})(?!\d{3}\d{2}0{4})\d{9}$|\d{3}-\d{2}-\d{4}$
    

    除最后一个样本外,它拒绝接受以下样本。

    555555555
    555005555
    222540000
    123456789
    987654321
    000917642
    666082134
    231564365
    

    然而,当我尝试创建相同正则表达式的变体以考虑( - )破折号时。

    ^(?!(\d)\1{2}-(\d)\1{1}-(\d)\1{3})(?!123-45-6789)(?!987-65-4321)(?!0{3}-(\d)\1{1}-(\d)\1{2})(?!0{6}-(\d)\1{1}-(\d)\1{2})(?!\d{3}-0{2}-\d{4})(?!\d{3}-\d{2}-0{4})\d{9}$|\d{3}-\d{2}-\d{4}$
    

    它们似乎都没有失效。

1 个答案:

答案 0 :(得分:0)

如果你像这样表达正则表达式:

^(?!(\d)\1{2}-?(\d)\1{1}-?(\d)\1{3})(?!123-?45-?6789)(?!987-?65-?4321)(?!0{3}-?(\d)\1{1}-?(\d)\1{2})(?!0{6}-?(\d)\1{1}-?(\d)\1{2})(?!\d{3}-?0{2}-?\d{4})(?!\d{3}-?\d{2}-?0{4})\d{3}-?\d{2}-?\d{4}$

你可以摆脱最后的OR,并且可以用于虚线或非虚线输入。

此处示例:http://regex101.com/r/jK9eC5