3

正则表达式在开始或结束时没有空格,但允许中间有空格,但也只允许一个字符输入:

我得到的最接近的是:^([^\s])([\sa-zA-Z0-9_\-]*)([^\s])$

问题是它只有在输入是三个或更多字符时才会通过,我需要它接受一个字符并通过。例如:

以下内容应通过(使用 " 方便阅读,字符串中不需要)

"A"
"A B"
"Hello There"

以下应该失败

" A"
"A "
" A "
" test"

还需要只允许 AZ az 0-9 - _ 虽然出来,在中间部分添加空格但不在开始或结束处

有任何想法吗?

谢谢

4

2 回答 2

12

非空格,可选地后跟多组空格,然后是非空格:

^[^\s]+(\s+[^\s]+)*$

编辑:

要包括字符限制,只需将非空格类替换为允许的字符:

^[-_a-zA-Z0-9]+(\s+[-_a-zA-Z0-9]+)*$

另外,考虑对 Unicode 友好并使用类似的东西

^[-_\p{Alnum}]+(\s+[-_\p{Alnum}]+)*$

(假设您的正则表达式解释器允许它)。

于 2013-02-05T19:19:46.113 回答
2

将第一个非空格字符之后的所有内容设为可选:

^(?=\S)[a-zA-Z0-9_\s-]*\S$
于 2013-02-05T19:20:55.087 回答