代码之家  ›  专栏  ›  技术社区  ›  Chris Conway

123-45-6789或XXX-XX-XXXX的SSN Regex

  •  34
  • Chris Conway  · 技术社区  · 14 年前

    123-45-6789

    或者

    XXX-XX-XXXX号

    我现在有 ^\d{3}-?\d{2}-?\d{4}$ 它与第一个表达式匹配,但我需要将第二个表达式作为替代添加到其中。

    谢谢!

    6 回复  |  直到 14 年前
        1
  •  36
  •   Lazarus    14 年前

    (^\d{3}-?\d{2}-?\d{4}$|^XXX-XX-XXXX$) 应该这么做。

    ----编辑----

    ^(\d{3}-?\d{2}-?\d{4}|XXX-XX-XXXX)$ 有点整洁。

        2
  •  49
  •   Community Jaime Torres    11 年前

    严格地 回答你的问题:

    ^(123-45-6789|XXX-XX-XXXX)$
    

    该工作了。;-)

    如果你读了这一节 "Valid SSNs" 在维基百科的SSN文章中,SSN验证的regex显然要复杂一些。

    一点点 更精确的纯SSN正则表达式如下所示:

    ^(?!(000|666|9))\d{3}-(?!00)\d{2}-(?!0000)\d{4}$
    
        3
  •  5
  •   Spudley Pat    14 年前

    所以你现在有: ^\d{3}-?\d{2}-?\d{4}$

    你需要的是允许这些数字块中的任何一个变成“X”s。这也是一个相当简单的正则表达式-只需调整现有的。 X 而不是 \d X{3}-?X{2}-?X{4}

    您不希望将数字代码与和X代码组合在一起,因此您只需要允许使用一种情况或另一种情况,所以将它们包装在方括号中,并使用管道字符指定一种或另一种情况,如下所示:

    ^((\d{3}-?\d{2}-?\d{4})|(X{3}-?X{2}-?X{4}))$
    

    您可能还希望允许大写或小写X [Xx] 或者让整件事不区分大小写,使用 i

        4
  •  2
  •   nonopolarity    14 年前

    那就可以了

    /^[\dX]{3}-?[\dX]{2}-?[\dX]{4}$/
    

    如果你愿意 x 为了使其有效,您可以添加 i

    /^[\dX]{3}-?[\dX]{2}-?[\dX]{4}$/i
    

    仔细想想,上面的regex会接受

    123-xx-xxxx
    

    同样,根据您是否希望接受此表格,您可以 使用您的原始表格或其他表格:

    /^(\d{3}-?\d{2}-?\d{4})|(xxx-xx-xxxx)$/i
    
        5
  •  1
  •   Aakash Goel    14 年前

    (^[^-]{3}-?[^-]{3}-?[^-]{4}$)
    

    这将匹配3-3-4字符配置中除“-”以外的任何字符序列。例如:

    my @str = qw/
      1adfasdfa
      adsfaouaosd90890
      111-232-adafd
      xXX-232-1234
      111-222-4444
      $$%-AF#-131@
    /;
    
    foreach(@str)
    {
      print "$_\n" if /^[^-]{3}-?[^-]{3}-?[^-]{4}$/;
    }
    
        6
  •  0
  •   Michał Niklas    14 年前

    ^\d{3}-?\d{2}-?\d{4}$|^XXX-XX-XXXX$