JavaScript正则表达式不匹配少于3个字符的问题

时间:2019-07-05 08:26:49

标签: javascript regex

我有以下javascript正则表达式:

/^[^\s][a-z0-9 ]+[^\s]$/i

我需要允许在字符串中使用任何字母数字字符以及空格,但不允许在开头和结尾使用

奇怪的是,上述正则表达式不能接受少于3个字符,例如aa不匹配,但aaa将匹配。

我不确定为什么。谁能帮忙吗?

3 个答案:

答案 0 :(得分:2)

您有:[^\s](需要匹配至少一个非空白字符),[a-z0-9 ]+(需要匹配至少一个字母数字或空格字符)和再次[^\s](需要匹配)至少一个非空白字符)。因此,总共需要至少3个字符。

在开头和结尾使用单词边界:

/^\b[a-z0-9 ]+\b$/i

https://regex101.com/r/2GhH3N/1

答案 1 :(得分:2)

尝试以下正则表达式:

^(?! )[a-z0-9 ]*[a-z0-9]$

详细信息:

  • ^(?! )-字符串的开头,字符串后没有空格(因此在此我们排除了 初始空间)。
  • [a-z0-9 ]*-字母,数字和空格的序列,可能为空 (最后一个字母之前的内容(见下文)。
  • [a-z0-9]$-字符串的最后一个字母和结尾(因此在这里我们排除了 终端空间)。

答案 2 :(得分:1)

您应该将表达式重写为

/^[a-z0-9]+(?:\s+[a-z0-9]+)*$/i

请参见regex demo

注意:如果在字母数字字符使用之间只允许一个空格

/^[a-z0-9]+(?:\s[a-z0-9]+)*$/i
              ^^ 

详细信息

  • ^-字符串的开头
  • [a-z0-9]+-1个以上的字母/数字
  • (?:\s+[a-z0-9]+)*-0次或多次重复1+个空格(\s+)和1+个数字/字母
  • $-字符串的结尾。

请参见regex graph

enter image description here