咨询验证最多3个合规额外键的正则表达式是否正确
问题分析
你的正则存在两个核心问题:
- 负向前瞻
(?!0+,?$)仅检查了连续0的情况,未覆盖0与空格混合的场景(比如"0 0"),替换空格后会变成全0字符串,违反规则2。 - 两个负向前瞻未结合校验“全0+空格”的无效情况,导致这类输入能通过校验。
正确正则表达式
针对你的处理流程(先替换所有空格为空,再按逗号分割),正确的正则需要确保原始输入中每个逗号分隔的键段,替换空格后既不全是0,也符合长度和字符要求。推荐正则如下:
/^$|^(?:(?![0 ]*$)[A-Z0-9 ]{1,20}(?:,(?![0 ]*$)[A-Z0-9 ]{1,20}){0,2})$/i
正则各部分说明
^$:匹配空字符串,支持0个额外键的场景(?![0 ]*$):核心负向前瞻,确保当前键段不是全由0和空格组成,替换空格后自然不会出现全0的无效键[A-Z0-9 ]{1,20}:限制键段由字母、数字、空格组成,长度1-20(替换空格后长度≤20,且至少保留1个有效字符)(?:,(?![0 ]*$)[A-Z0-9 ]{1,20}){0,2}:允许追加0-2个符合规则的键段,确保总键数不超过3个- 末尾的
i标志:启用大小写不敏感匹配(若仅需大写可去掉)
校验示例
- 合法输入(通过校验):
"ABC123"(单个键,替换后为ABC123)"0A, 123 , XYZ"(三个键,替换后为0A,123,XYZ)" aBc "(单个键,替换后为aBc)
- 无效输入(被拦截):
"0 0"(替换后为00,全0)" , 000 "(第一个键全空格,第二个键全0+空格)"ABCDEFGHIJKLMNOPQRSTUV"(单个键长度超过20)"A,B,C,D"(超过3个键)
内容的提问来源于stack exchange,提问作者Noë
相关产品推荐
相关产品推荐

