能否用单个正则表达式实现带指定排除规则的字符长度校验?
结论
可以通过单个正则表达式实现你提出的全部校验规则。
可用正则表达式
匹配逻辑:符合规则的内容会成功匹配,不符合规则(有效字符超112)的内容匹配失败
^(?=(?:(?:##[A-Za-z0-9]+##|\[(?:R|L|%)\]|[{}[\]])*[^{}[\]]){0,112}(?:##[A-Za-z0-9]+##|\[(?:R|L|%)\]|[{}[\]])*$).*$
实现逻辑说明
- 核心采用正向肯定预查
(?=...)完成有效字符计数,预查不会消耗匹配字符,不会影响整体内容的匹配逻辑 - 计数逻辑完全对齐你的要求:
- 先跳过所有需排除的内容,每匹配到1个有效字符计数+1,最多允许计数到112
- 需排除的内容完全覆盖你指定的三类:
- 完整的
##字母/数字##格式串 - 固定标识
[R]、[L]、[%] - 特殊字符
{、}、[、]
- 完整的
- 所有不在排除范围内的字符(含空格、其他合法字符)均会被计入有效长度,超出112则匹配失败
测试验证
你给出的示例内容有效字符数远低于112,可正常匹配通过;如果在示例中追加有效字符到总有效数超过112,正则会直接匹配失败,符合校验要求。
内容的提问来源于stack exchange,提问作者ivan montoya
相关产品推荐
相关产品推荐

