我需要一个正则表达式,允许单个字母或数字由逗号分隔,如1,2,3
或A,B,C
和单个alpha或数字,如A C 1 2
。它不应该允许123 abc
或ABC
。
我试了^(?:([A-Z0-9a-z])(?!.?1),)[A-Z0-9a-z]$
,但它不起作用。
我想这样可以。我保留^和$来和你的例子保持一致。我对你的问题的最好理解使我得出以下具体要求——这是我相信你想要的,但如果不是,那么我们需要更清楚地了解问题的设置和背景:
- 当逗号是分隔符时,您在示例中特别使用了全数字或全字母。然而,当空格是分隔符时,您使用字母和数字的混合。
- 我认为这是有意的交流,因此这导致要求IF分隔符是逗号,那么整个字符串中只允许一种类型的主字符-所有字母或所有数字。
- 而如果分隔符是空格,则允许字母和数字的混合
- 因此,这种要求需要多个带有竖线";"或";"的图案。操作符
^([A-Za-z](,[A-Za-z])*)|([0-9](,[0-9])*)|([A-Z0-9a-z]( [A-Z0-9a-z])*)$
这里有3个主要部分,由竖线算子分隔。在简单的语言中,它们可以表示为:
- 整个字符串可以是一个或多个字母,由单个逗号分隔,或
- 整个字符串可以是一个或多个数字,由单个逗号分隔,或
- 整个字符串可以是一个或多个字母或数字,以单个空格分隔(允许全alpha、全数字和混合)。
如果你不想混合和匹配空格和逗号的(所以1 2,3
A C 1,2
无效),您可以使用带有反向引用的捕获组:
^[A-Za-z0-9](?:([ ,])[A-Za-z0-9](?:1[A-Za-z0-9])*)?$
^
起始字符串[A-Za-z0-9]
匹配单个字符[a- za -z0-9](?:
非捕获组([ ,])
捕获组1,匹配空格或,
[A-Za-z0-9]
匹配单个字符[a- za -z0-9](?:1[A-Za-z0-9])*
可选地重复匹配在第1组中捕获的内容,后面跟着单个字符[a- za -z0-9]
)?
关闭外部on捕获组并使其为可选$
字符串结束
Regex演示