如何仅用正则表达式验证逗号分隔的1-3字符单词输入?
纯正则表达式解决方案
可以使用以下正则表达式直接满足需求,无需额外运行时校验:
/^[A-Z0-9]{1,3}(?:, ?[A-Z0-9]{1,3})*(?:, ?)?$/
正则说明:
^:匹配字符串开头[A-Z0-9]{1,3}:匹配第一个1-3位的有效字符(大写字母或数字)(?:, ?[A-Z0-9]{1,3})*:匹配任意数量(包括0个)的「分隔符+有效字符」组合,其中, ?匹配逗号后可选的空格(支持,或,两种分隔方式)(?:, ?)?:允许字符串末尾可选地带上逗号或逗号加空格(对应BRU,、BRU,这类有效输入)$:匹配字符串结尾
验证效果:
- 有效输入(全部匹配):
B、BR、BRU、BRU,、BRU,、BRU, A、BRU, ALC、BRU, ALC,B - 无效输入(全部不匹配):
BRUU、BRU ALC、BRUALC
原正则问题分析:
你之前使用的/^(?:[A-Z0-9]{1,3}(?:, |,)?)*$/存在漏洞,因为(?:[A-Z0-9]{1,3}(?:, |,)?)*会允许连续的有效字符块(比如BRU和ALC直接拼接成BRUALC),正则会把它们拆成多个[A-Z0-9]{1,3}片段匹配,而没有强制要求片段之间必须有分隔符。新正则通过强制后续有效字符必须跟在分隔符之后,彻底避免了这种情况。
内容的提问来源于stack exchange,提问作者karlitos
相关产品推荐
相关产品推荐

