如何修改SSN校验正则表达式 新增排除全相同数字号码规则
SSN校验正则表达式调整方案
现有正则已覆盖前6条校验规则,仅需在正则最前端新增全局负向零宽断言,即可实现第7条「所有位不得为完全相同数字」的校验要求,无需改动原有已验证通过的匹配逻辑。
调整后完整正则代码
^(?!(\d)\1{2}-?\1{2}-?\1{4}$)((?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$|(?!000|666)[0-8][0-9]{2}(?!00)[0-9]{2}(?!0000)[0-9]{4}$)
新增逻辑说明
- 最开头添加的
(?!(\d)\1{2}-?\1{2}-?\1{4}$)为全局排除规则:- 捕获字符串第一位数字为分组1
- 直接拦截「3位相同数字 + 可选连字符 + 2位相同数字 + 可选连字符 + 4位相同数字」的全同号结构,覆盖
111-11-1111这类带连字符、111111111这类不带连字符的两类非法格式
- 原有两个分支的匹配逻辑完全保留,不会对前6条已实现规则的校验效果产生影响
最终覆盖的全部校验规则
- 连字符为可选格式,同时支持
XXX-XX-XXXX、XXXXXXXXX两种输入结构 - 号码禁止以
000开头 - 号码禁止以
666开头 - 号码禁止以
900-999区间号段开头 - 中间两位数字禁止为
00 - 最后四位数字禁止为
0000 - 所有位数字完全相同的格式(含带/不带连字符两种情况)判定为非法
内容的提问来源于stack exchange,提问作者ryanbuckner
相关产品推荐
相关产品推荐

