正则表达式需求:禁止全同字符(含&分隔)及多规则校验
符合特定规则的正则表达式解决方案
核心规则明确
- 允许字符:大写字母(A-Z)、数字(0-9),且恰好包含1个&
- 长度限制:整体字符串长度为12-14位(包含&)
- 位置限制:&不能出现在字符串的首尾
- 特殊拦截:禁止所有非&字符完全相同(例如
1111111&11111这类场景必须拦截)
最终正则表达式
^(?!([A-Z0-9])\1*&\1*$)(?=[A-Z0-9]*&[A-Z0-9]*$)(?!^&|&$)[A-Z0-9&]{12,14}$
规则匹配拆解
^(?!([A-Z0-9])\1*&\1*$)
负向前瞻规则,专门拦截非&字符全相同的场景:- 捕获第一个非&字符作为基准
([A-Z0-9]) - 验证后续内容是否为「基准字符重复 + 单个& + 基准字符重复」的结构,是则直接排除
- 捕获第一个非&字符作为基准
(?=[A-Z0-9]*&[A-Z0-9]*$)
正向前瞻规则,确保字符串中恰好存在1个&,且&前后只能是允许的字母/数字(?!^&|&$)
负向前瞻规则,直接排除&位于字符串开头或结尾的情况[A-Z0-9&]{12,14}$
最终长度与字符范围限制,确保整体长度在12-14位之间,且仅包含允许的字符
示例验证
符合要求的字符串
ABC123567GHDG4:长度14位,仅含大写字母与数字,无&,满足规则1111111&11112:包含1个&且不在首尾,非&字符不全相同,长度12位,满足规则
被拦截的字符串
111111111111:无&且所有字符相同,触发第一部分拦截规则&125478556325:&位于开头,触发第三部分拦截规则1111111&11111:非&字符全为1,触发第一部分拦截规则
内容的提问来源于stack exchange,提问作者Harinatha Reddy
相关产品推荐
相关产品推荐

