我有以下javascript正则表达式:
/^[^\s][a-z0-9 ]+[^\s]$/i
我需要允许在字符串中使用任何字母数字字符以及空格,但不允许在开头和结尾使用
。奇怪的是,上述正则表达式不能接受少于3个字符,例如aa
不匹配,但aaa
将匹配。
我不确定为什么。谁能帮忙吗?
答案 0 :(得分:2)
您有:[^\s]
(需要匹配至少一个非空白字符),[a-z0-9 ]+
(需要匹配至少一个字母数字或空格字符)和再次[^\s]
(需要匹配)至少一个非空白字符)。因此,总共需要至少3个字符。
在开头和结尾使用单词边界:
/^\b[a-z0-9 ]+\b$/i
答案 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: