需求:匹配单字符逗号/空格分隔格式的正则表达式(禁多字符)
符合需求的正则表达式
可以使用以下正则表达式满足你的要求:
^(?:[A-Za-z0-9](?:,[A-Za-z0-9])*)$|^(?:[A-Za-z0-9](?: [A-Za-z0-9])*)$
正则说明
- 表达式分为两部分,用
|分隔,分别匹配两种合法格式:- 第一部分
^(?:[A-Za-z0-9](?:,[A-Za-z0-9])*)$:匹配纯逗号分隔的单个字母/数字序列,比如1,2,3、A,B,C,也支持单个字符(如5、X)。 - 第二部分
^(?:[A-Za-z0-9](?: [A-Za-z0-9])*)$:匹配纯空格分隔的单个字母/数字序列,比如A C 1 2,同样支持单个字符。
- 第一部分
- 整个表达式会自动排除多字符组合(如
123、ABC),以及混合分隔符的情况(如A,B C)。
你之前正则的问题
你尝试的^(?:([A-Z0-9a-z])(?!.?\1),)[A-Z0-9a-z]$存在几个问题:
- 仅覆盖了逗号分隔的场景,完全没处理空格分隔的需求;
- 额外添加了
(?!.?\1)断言,限制字符不能重复,但你的需求里并没有这个要求; - 结构上只能匹配恰好两个元素的逗号分隔序列(比如
A,B),无法匹配单个字符或三个及以上元素的情况。
内容的提问来源于stack exchange,提问作者user21617815
相关产品推荐
相关产品推荐

