我在C#中有一个方法,它说FormatSSN采用字符串格式的SSN并替换破折号。我的意思是我期待SSN采用XXX-XX-XXXX格式。我想写一个正则表达式,确保SSN采用我提到的格式。
任何人都可以帮我构建正则表达式吗?
答案 0 :(得分:17)
^\d{3}-\d{2}-\d{4}$
\d
是一个数字,{X}
重复前一个元素X
次。
正如Dmitry在评论中指出的那样,在开头添加^
而在结尾添加$
将导致正则表达式只匹配整个字符串是否为SSN。如果没有这些锚点,abc123-45-6789xyz
之类的字符串也会匹配。
答案 1 :(得分:6)
我过去使用过简单的表达式,但由于SSN的形成有一些规则,我想出了一些更详细的说明:
^(?!000)(?!666)(?!9[0-9][0-9])\d{3}[- ]?(?!00)\d{2}[- ]?(?!0000)\d{4}$
根据Social Security Number Randomization,这个正则表达式正确地排除了以666,000和900-999开头的SSN。
您可以在Rubular尝试。
答案 2 :(得分:3)
您也可以尝试
[RegularExpression(@"^\d{9}|\d{3}-\d{2}-\d{4}$",
ErrorMessage = "Invalid Social Security Number")]