SSN正则表达式为123-45-6789或XXX-XX-XXXX

时间:2010-11-03 13:25:39

标签: regex

有人可以为我提供与之匹配的SSN的正则表达式

123-45-6789

OR

XXX-XX-XXXX

我目前有^\d{3}-?\d{2}-?\d{4}$与第一个表达式匹配,但我需要添加第二个表达式作为替代。

谢谢!

6 个答案:

答案 0 :(得分:46)

严格回答您的问题:

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

工作。 ; - )

如果您阅读维基百科SSN文章中的"Valid SSNs"部分,那么很明显SSN验证的正则表达式有点复杂。

因此,一点点更准确的纯SSN正则表达式将如下所示:

^(?!(000|666|9))\d{3}-(?!00)\d{2}-(?!0000)\d{4}$

答案 1 :(得分:36)

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

----编辑----

正如乔尔所指出的,你也可以做^(\d{3}-?\d{2}-?\d{4}|XXX-XX-XXXX)$,这有点整洁。

答案 2 :(得分:5)

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

您需要的是允许任何这些数字块为“X”。这也是一个相当简单的正则表达式 - 只需调整现有的正则表达式,使其在发生的三个位置中的每个位置都有X而不是\dX{3}-?X{2}-?X{4}

您不希望将数字代码与X代码组合在一起,因此您只需要允许一个案例或另一个案例,因此请将它们包含在括号中,并使用管道字符指定其中一个或另一个,像这样:

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

您可能还希望允许使用大写或小写X.可以使用[Xx]指定,也可以使用正则表达式之外的i修饰符使整个不区分大小写。

答案 3 :(得分:2)

然后它可以

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

如果您希望x也有效,可以将i修饰符添加到结尾:

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

第二个想法,上面的正则表达式将接受

123-xx-xxxx

同样,根据您是否希望接受此表格,您可以 使用您的原始表格“或”另一种形式:

/^(\d{3}-?\d{2}-?\d{4})|(xxx-xx-xxxx)$/i

答案 4 :(得分:1)

更通用的匹配是:

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

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

my @str = qw/
  1adfasdfa
  adsfaouaosd90890
  111-232-adafd
  xXX-232-1234
  111-222-4444
  $$%-AF#-131@
/;

foreach(@str)
{
  print "$_\n" if /^[^-]{3}-?[^-]{3}-?[^-]{4}$/;
}

答案 5 :(得分:0)

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