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

时间:2013-02-05 19:15:31

标签: .net regex

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

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

这个问题是它只会在输入是三个或更多个字符时通过,我需要它接受一个字符并传递。 EG:

以下内容应该通过(使用“为了便于阅读,在字符串中不需要)

"A"
"A B"
"Hello There"

以下内容应失败

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

也需要只允许A-Z a-z 0-9 - _虽然输出,但在中间部分添加空格但不在开头或结尾添加空格

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:12)

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

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

修改

要包含字符限制,只需用允许的字符替换非空格类:

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

另外,请考虑使用Unicode并使用类似

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

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

答案 1 :(得分:2)

在第一个非空格字符可选后创建所有内容:

^(?=\S)[a-zA-Z0-9_\s-]*\S$