如何编写正则表达式限制字符串连续数字不超5个、总数字不超8个?
正则调整方案
你原来的正则存在三个明显缺陷:
- 未统计全字符串的数字总数量,无法拦截总数字超过8个的场景
- 未允许匹配空格,不符合示例中带空格的输入规则
- 逻辑覆盖不全,存在边缘场景误判
最终可用正则
/^(?!(?:\D*\d){9})(?!.*\d{6})[a-zA-Z\d\s]*$/
规则拆解
- 开头
^(?!(?:\D*\d){9}):零宽负向断言,限制全字符串内数字最多出现8次(匹配到9次数字的情况直接不通过) - 中间
(?!.*\d{6}):零宽负向断言,限制不能出现6个及以上的连续数字 - 结尾
[a-zA-Z\d\s]*$:匹配所有允许的字符(大小写字母、数字、空格),直到字符串结束
示例匹配验证
所有示例符合预期,少数标注和规则冲突的为示例笔误:
- 12345 => 总数字5、连续数字5,匹配通过
- Yograj => 无数字,匹配通过
- Yograj123456 => 存在6个连续数字,匹配不通过
- 12345Yograj => 总数字5、连续数字5,匹配通过
- 12345Yograj12345 => 总数字10个,按规则应为不通过,属于示例笔误
- Yograj123456Yograj => 存在6个连续数字,匹配不通过
- Yograj123Varsolkar456789 => 存在6个连续数字,匹配不通过
- 123Yograj45678Varsolkar => 总数字3+5=8、单段连续最多5,匹配通过
- A1B2C3D4e5f6g7h8i9j0 => 总数字10个,匹配不通过
- Yograj 890 Varsolkar 78455 => 总数字3+5=8、单段连续最多5,按规则应为通过,属于示例笔误
内容的提问来源于stack exchange,提问作者Yograj Varsolkar
相关产品推荐
相关产品推荐

