正则表达式开发需求:禁止全相同字符(含&分隔)及规则适配
修正后的正则表达式解决方案
针对你遇到的问题,以下是满足所有要求的正则表达式:
^(?=.{12,14}$)(?!(.)(?:&?\1)+$)(?![^&]*&[^&]*&)[A-Za-z0-9]*&?[A-Za-z0-9]*$
正则各部分解析
^(?=.{12,14}$):正向断言,确保整个字符串(包含&)的长度严格在12-14位之间(?!(.)(?:&?\1)+$):负向断言,禁止除&外所有字符完全相同的场景——捕获第一个非&字符后,检查后续内容要么是&要么是该字符,若整个字符串符合此模式则匹配失败(比如1111111&11111或AAAA&AAAAA都会被拦截)(?![^&]*&[^&]*&):负向断言,确保字符串中最多只有一个&,禁止出现多个特殊字符[A-Za-z0-9]*&?[A-Za-z0-9]*$:匹配主体内容,允许字母数字字符,最多包含一个&
示例验证
| 测试用例 | 结果 | 原因 |
|---|---|---|
111111111111 | 不允许 | 全相同字符 |
1111111&11111 | 不允许 | 除&外全为相同字符 |
111111111112 | 允许 | 长度合规,存在不同字符 |
1111111&11112 | 允许 | 长度合规,含一个&且有不同字符 |
ABC123567GHDG4 | 允许 | 长度合规,字母数字混合无& |
原正则的问题说明
你当前使用的^(\d)(?!\1+$)(?=.{11,13}$)[0-9]*(?:[&][0-9]+)?$存在两个核心问题:
- 仅支持数字字符,未覆盖需求中的字母
- 仅检查了无&场景下的全相同字符,无法识别被&分隔但其余字符全相同的情况(比如
1111111&11111)
内容的提问来源于stack exchange,提问作者Harinatha Reddy
相关产品推荐
相关产品推荐

