当前位置:  开发笔记 > 程序员 > 正文

接受虚线,空格或无空间的社会安全号码验证

如何解决《接受虚线,空格或无空间的社会安全号码验证》经验,为你挑选了2个好方法。

我想接受的社会安全号码是:

xxx-xx-xxxx (ex. 123-45-6789)
xxxxxxxxx (ex. 123456789)
xxx xx xxxx (ex. 123 45 6789)

我不是正则表达式专家,但我写了这个(它有点难看)

^(\d{3}-\d{2}-\d{4})|(\d{3}\d{2}\d{4})|(\d{3}\s{1}\d{2}\s{1}\d{4})$

然而,当它实际上应该失败时,这个社会安全号码会通过,因为只有一个空格

12345 6789

所以我需要一个更新的正则表达式,拒绝像这样的东西

12345 6789
123 456789

为了使事情变得更复杂,似乎SSN不能以000或666开始并且可以达到899,第二和第三组数字也不能全部为0.

我想出了这个

^(?!000|666)[0-8][0-9]{2}[ \-](?!00)[0-9]{2}[ \-](?!0000)[0-9]{4}$

哪个用空格或破折号验证,但如果数字是这样的话,它就会失败

123456789

理想情况下,这些SSN应该通过

123456789
123 45 6789
123-45-6789
899-45-6789
001-23-4567

这些都应该失败

12345 6789
123 456789
123x45x6789
ABCDEEEEE
1234567890123
000-45-6789
123-00-6789
123-45-0000
666-45-6789

Szymon.. 6

要解决破折号,空格等一致的问题,可以使用反向引用.使第一个分隔符成为一个组并允许它是可选的 - ([ \-]?).然后,您可以引用它\1以确保第二个分隔符与第一个分隔符相同:

^(?!000|666)[0-9]{3}([ -]?)(?!00)[0-9]{2}\1(?!0000)[0-9]{4}$

看到这里(感谢@Tushar)



1> Szymon..:

要解决破折号,空格等一致的问题,可以使用反向引用.使第一个分隔符成为一个组并允许它是可选的 - ([ \-]?).然后,您可以引用它\1以确保第二个分隔符与第一个分隔符相同:

^(?!000|666)[0-9]{3}([ -]?)(?!00)[0-9]{2}\1(?!0000)[0-9]{4}$

看到这里(感谢@Tushar)


[`^(?!000 | 666)[0-9] {3}([ - ]?)(?!00)[0-9] {2}\1(?!0000)[0-9] { 4} $`](https://regex101.com/r/rA2xA2/1)

2> George..:

CodeProject上提供了更完整的验证规则,网址为http://www.codeproject.com/Articles/651609/Validating-Social-Security-Numbers-through-Regular.在链接消失的情况下复制此处的信息,还要扩展代码项目的答案.

社会安全号码不能:

包含任何特定组中的所有零(即000 - ## - ####,### - 00 - ####,或### - ## - 0000)

从'666'开始.

从'900-999'的任何值开始

'078-05-1120'(由于Woolworth的钱包Fiasco)

是'219-09-9999'(出现在社会保障局的广告中)

从引用的CodeProject文章中获取的RegEx将根据所有规则验证所有社会安全号码 - 需要破折号作为分隔符.

^(?!219-09-9999|078-05-1120)(?!666|000|9\d{2})\d{3}-(?!00)\d{2}-(?!0{4})\d{4}$

与空格相同,而不是破折号

^(?!219 09 9999|078 05 1120)(?!666|000|9\d{2})\d{3} (?!00)\d{2} (?!0{4})\d{4}$

最后,这将验证没有空格或破折号的数字

^(?!219099999|078051120)(?!666|000|9\d{2})\d{3}(?!00)\d{2}(?!0{4})\d{4}$

结合上述三种情况,我们得到了

回答

^((?!219-09-9999|078-05-1120)(?!666|000|9\d{2})\d{3}-(?!00)\d{2}-(?!0{4})\d{4})|((?!219 09 9999|078 05 1120)(?!666|000|9\d{2})\d{3} (?!00)\d{2} (?!0{4})\d{4})|((?!219099999|078051120)(?!666|000|9\d{2})\d{3}(?!00)\d{2}(?!0{4})\d{4})$

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有