在开始或结束时没有空格的正则表达式,但允许中间的空格,但也只允许一个字符输入:
我最接近的是:^([^\s])([\sa-zA-Z0-9_\-]*)([^\s])$
这个问题是它只会在输入是三个或更多个字符时通过,我需要它接受一个字符并传递。 EG:
以下内容应该通过(使用“为了便于阅读,在字符串中不需要)
"A"
"A B"
"Hello There"
以下内容应失败
" A"
"A "
" A "
" test"
也需要只允许A-Z a-z 0-9 - _虽然输出,但在中间部分添加空格但不在开头或结尾添加空格
有什么想法吗?
由于
答案 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$