gpt4 book ai didi

regex - 接受破折号、空格或无空格的社会安全号码验证

转载 作者:行者123 更新时间:2023-12-04 22:19:44 24 4
gpt4 key购买 nike

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

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

最佳答案

CodeProject 上提供了更完整的验证规则,网址为 http://www.codeproject.com/Articles/651609/Validating-Social-Security-Numbers-through-Regular .如果链接消失,请在此处复制信息,但也会稍微扩展 codeproject 答案。

社会安全号码不能:

  • 包含任何特定组中的所有零(即 000-##-####、###-00-#### 或 ###-##-0000)
  • 以“666”开头。
  • 以 '900-999' 之间的任何值开头
  • 是 '078-05-1120'(由于 Woolworth 的钱包惨败)
  • Be '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})$

    关于regex - 接受破折号、空格或无空格的社会安全号码验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34523247/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com