关于SSN及9位号码筛选的正则匹配规则技术问询
匹配有效社会安全号码(SSN)的正则表达式方案
我来给你分享一个能精准满足需求的正则表达式,它既能匹配多种格式的合法SSN,又能自动过滤掉那些明显无效的号码。
核心正则表达式
(?<!\d)(?!000|666|9\d{2})(\d{3})(?:[^\d]?)(?!00)(\d{2})(?:[^\d]?)(?!0000)(\d{4})(?!\d)
详细规则拆解
支持匹配的有效SSN格式
- 带任意非数字分隔符的标准结构SSN,比如:
123-45-6789(连字符分隔)123.45.6789(点分隔)123 45 6789(空格分隔)- 甚至非标准分隔符如
123x45x6789也能匹配
- 无分隔符的9位连续数字,但要求前后为空白或非数字字符(避免和更长的数字串混淆),比如:
- 文本中的
123456789 abc 123456789 def
- 文本中的
自动排除的无效SSN类型
- 以
000开头的号码(如000-12-3456) - 以
666开头的号码(如666-78-9012) - 前三位以
9开头的号码(如912-34-5678) - 中间两位为
00的号码(如123-00-4567) - 最后四位为
0000的号码(如123-45-0000) - 全零的无效号码
000-00-0000 - 连续数字的典型无效号
123-45-6789
使用注意事项
这个正则用了负向断言来精准排除无效的前缀、中间段和后缀,同时用(?:[^\d]?)来兼容任意单个非数字分隔符(包括无分隔符的情况)。前后的(?<!\d)和(?!\d)则确保SSN不会是更长数字串的一部分,避免误匹配。
如果需要在特定编程语言中使用,可能需要微调转义字符(比如Java中要处理反斜杠转义),但核心逻辑是通用的。
内容的提问来源于stack exchange,提问作者Joe Tramonte
相关产品推荐
相关产品推荐

