仅允许使用正则表达式的字母数字字符或空格

时间:2016-04-19 11:52:12

标签: regex

我需要一个正则表达式只允许使用字母数字和空字符串,所以我有:

^$|[a-zA-Z0-9]

但这允许使用“dfdf df”...为什么?

有$ |任何正则表达式都不足以允许空字符串?

3 个答案:

答案 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]

如果此模式成功,则不满足您的要求(反之亦然)。

你的模式不起作用的原因是你的第二个分支没有描述整个字符串(仅当字符串中某处有一个字母数字字符时才检查)

我的解决方案检查字符串中是否有一个非字母数字字符。 (因此当字符串仅包含字母数字字符或字符串为空时,模式将失败。)