不允许开头或结尾有空格的正则表达式,但允许中间有空格,同时也允许只输入一个字符。

3

正则表达式用于在开头或结尾不允许空格,但中间允许空格,同时还允许仅有一个字符输入:

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

这个问题是它只在输入三个以上字符时才能通过,我需要它接受单个字符并通过。例如:

以下应该通过(使用“易于阅读”,字符串中不需要)

"A"
"A B"
"Hello There"

以下内容应该会失败。
" A"
"A "
" A "
" test"

此处需要仅允许 A-Z a-z 0-9 - _ 这些字符,但在中间部分可以添加空格,但不能在开头或结尾添加。

有什么想法吗?

谢谢


2
请同时包含一个标签,指定您正在使用的编程语言或工具。 - Lev Levitsky
抱歉,还需要在整个文本中仅允许 A-Z a-z 0-9 - _,但在中间部分添加空格而不在开头或结尾。 - user959423
2个回答

12

非空格字符,可选择跟随多个空格分组,然后是非空格字符:

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

编辑:

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

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

另外,请考虑采用Unicode并使用类似以下的内容:

^[-_\p{Alnum}]+(\s+[-_\p{Alnum}]+)*$
假设您的正则表达式解释器允许它。

抱歉,我之前漏掉了一个要求,它还需要仅允许 A-Z a-z 0-9 - _,但中间部分可以添加空格,但不能在开头或结尾。 - user959423
请问您能否解释一下这段代码的含义是什么?^[-_a-zA-Z0-9]+(\s+[-_a-zA-Z0-9]+)*$ - user959423
这是一些允许的非空字符数量,可选择后跟多个后缀,其中每个后缀是空格后跟允许的非空字符数量。 - Adam Crume

2
使第一个非空格字符后的所有内容都变为可选项:
^(?=\S)[a-zA-Z0-9_\s-]*\S$

这允许您输入任何字符作为第一个字符,其中应限制为a-zA-Z0-9。 - user959423
你没有说过那个,是吗?已编辑。 - Niet the Dark Absol
抱歉,我在初始帖子中错过了那个。最后一分钟进行了编辑。 - user959423

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接