正则表达式求助:匹配以逗号和/或空格分隔的alphanumeric字符串
正则表达式适配方案
需求匹配的正确正则
兼容首尾多余逗号/空格的版本(不符合首尾规则也不判定非法)
^\s*,?\s*[a-zA-Z0-9]+(?:\s*,\s*[a-zA-Z0-9]+)*\s*,?\s*$
严格要求首尾无逗号/空格的版本(符合优先规则)
^[a-zA-Z0-9]+(?:\s*,\s*[a-zA-Z0-9]+)*$
规则说明
- 核心片段匹配
[a-zA-Z0-9]+,要求每个字母数字片段至少有1个字符 - 分隔符逻辑为
\s*,\s*,确保逗号为必填项,逗号前后可以存在任意数量的空格(包括0个),支持a,b、a, b、a ,b、a , b等多种用户输入形式 - 非捕获组
(?:...)用来重复「分隔符+片段」的组合,不会产生额外捕获开销 - 兼容版本首尾的
\s*,?\s*逻辑,允许开头/结尾存在最多1个多余逗号和任意数量的空格,符合你提到的首尾不符合规则也不判定非法的要求
原有正则的问题
你之前写的[0-9a-zA-Z]?+(,\s[0-9a-zA-Z]+)*存在三个明显缺陷:
- 开头的
[0-9a-zA-Z]?+量词规则错误,最多只能匹配1个字母数字字符,无法适配长度大于1的首个片段,还允许开头为空 - 中间分隔符仅写了
,\s,只支持逗号加单个空格的分隔形式,无法匹配逗号前后无空格、多空格的场景,比如示例中的ab1c,def2就会匹配失败 - 完全没有覆盖首尾可能存在多余空格、逗号的场景
内容的提问来源于stack exchange,提问作者N. Kaufman
相关产品推荐
相关产品推荐

