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

Chr*_*way 37 regex

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

123-45-6789

要么

XXX-XX-XXXX

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

谢谢!

spl*_*ash 49

严格回答你的问题:

^(123-45-6789|XXX-XX-XXXX)$
Run Code Online (Sandbox Code Playgroud)

干了工作.;-)

如果您阅读Wikipedia的SSN文章中的"有效SSN"部分,那么很明显SSN验证的正则表达式有点复杂.

因此一点点更准确的纯SSN的正则表达式应该是这样的:

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

  • 当我写这篇评论时,这个答案的最后编辑时间是 2010 年 11 月 3 日。但是,引用的维基百科文章指出,SSN 验证已于 2011 年 6 月 25 日发生更改,允许在更多地方使用更多号码。 (2认同)
  • 弄清楚了。要匹配“ xxx-xx-xxxx”或“ xxxxxxxxx”,您只需要在两个带破折号的模式之间进行切换。`^(?!(000 | 666 | 9))\ d {3}-(?! 00)\ d {2}-(?! 0000)\ d {4} $ | ^(?!(000 | 666 | 9))\ d {3}(?! 00)\ d {2}(?! 0000)\ d {4} $` (2认同)

Laz*_*rus 36

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

----编辑----

正如乔尔所指出的,你也可以做^(\d{3}-?\d{2}-?\d{4}|XXX-XX-XXXX)$一些更整洁的事情.

  • 我将抽象出^ $部分,但这应该有效. (4认同)

Spu*_*ley 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}))$
Run Code Online (Sandbox Code Playgroud)

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