有人可以为我提供与之匹配的SSN的正则表达式
123-45-6789
OR
XXX-XX-XXXX
我目前有^\d{3}-?\d{2}-?\d{4}$
与第一个表达式匹配,但我需要添加第二个表达式作为替代。
谢谢!
答案 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
而不是\d
:X{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$