如何修改正则表达式匹配5ABCDEXXX格式的9位手机号码?
解决方案
原正则的问题
- 未使用
^和$锚点,会匹配字符串中的片段而非完整9位号码 - 匹配逻辑混乱:
.{5}会匹配任意5个字符,无法精准限制开头为5、中间4位不重复的规则,也没定位结尾的3位相同数字
正确的正则表达式
^5(?!(\d).{0,2}\1)\d{4}\d(\d)\1{2}$
规则拆解
^:锁定字符串开头,确保从第1位开始匹配5:强制第1位为数字5(?!(\d).{0,2}\1):负前瞻断言,检查接下来的4位数字中无重复(.{0,2}覆盖4位内相同数字的所有间隔场景)\d{4}:匹配第2-5位的4个不同数字\d:匹配第6位的任意数字(无重复限制)(\d)\1{2}:匹配结尾连续3个相同数字——(\d)捕获一个数字,\1{2}重复该数字2次,凑成3位相同$:锁定字符串结尾,确保是完整的9位号码
测试验证
- 匹配合法号码:
582694666→ 符合所有规则,成功匹配 - 拒绝误匹配号码:
552728495→ 结尾不是3位相同数字,且第2位与开头5重复,触发负前瞻断言失败,不会被匹配
内容的提问来源于stack exchange,提问作者Leena
相关产品推荐
相关产品推荐

