我需要一个正则表达式只允许使用字母数字和空字符串,所以我有:
^$|[a-zA-Z0-9]
但这允许使用“dfdf df”...为什么?
有$ |任何正则表达式都不足以允许空字符串?
答案 0 :(得分:2)
您的^$|[a-zA-Z0-9]
匹配一个空字符串,其中^$
或(|
)是一个字母数字字符([a-zA-Z0-9]
)。根据您使用该正则表达式的方法/语言,它可以获取不同的结果。
正则表达式只允许使用字母数字和空字符串
如果字符串仅由字母数字组成或为空,则匹配字符串
^[a-zA-Z0-9]*$
请参阅regex demo
下面:
^
- 匹配字符串的开头[a-zA-Z0-9]*
- (注意匹配0次或更多次的*
量词!)0+字母数字符号$
- 字符串的结尾(请注意,在某些版本中,它还匹配字符串中最后一个位置的最后一个换行符之前的位置)答案 1 :(得分:1)
这是因为|
之后的部分没有锚点^
和$
的断言。
您可以使用:
^$|^[a-zA-Z0-9]+$
或者:
^[a-zA-Z0-9]*$
或者:
^(?:[a-zA-Z0-9]+)?$
他们都会做同样的事情。
答案 2 :(得分:0)
使用否定条件:
[^a-zA-Z0-9]
如果此模式成功,则不满足您的要求(反之亦然)。
你的模式不起作用的原因是你的第二个分支没有描述整个字符串(仅当字符串中某处有一个字母数字字符时才检查)。
我的解决方案检查字符串中是否有一个非字母数字字符。 (因此当字符串仅包含字母数字字符或字符串为空时,模式将失败。)