防止末尾空格和额外空格的正则表达式

4

现在我有一个正则表达式,可以防止用户输入任何特殊字符。允许的字符只有A到Z、0到9或空格。

我想改进这个正则表达式,以防止以下情况:

  1. 无前导/尾随空格-如果用户输入一个或多个空格,在条目之前或之后,请不允许。
  2. 无双空格-如果用户多次按空格键,请不允许。

我目前拥有用于防止特殊字符的正则表达式,似乎工作得很好,如下所示:

^[a-zA-Z0-9 ]+$

在尝试了其他一些想法之后,我尝试了所有这些选项,但它们都没有奏效:

^\A\s+[a-zA-Z0-9 ]+$\A\s+
/s*^[a-zA-Z0-9 ]+$/s*

我能为您提供帮助,这段代码需要怎样的协助呢?我理解您想要字母A到Z,数字0到9,以及没有前导或后置空格。

谢谢。


喜欢 ^(?!.* {2})(?=\S.*\S$)[a-zA-Z0-9 ]+$ 吗?这是C#吗? - Wiktor Stribiżew
什么编程语言? - Brendan Abel
1个回答

6
你可以使用以下正则表达式:
^[a-zA-Z0-9]+(?: [a-zA-Z0-9]+)*$

请查看正则表达式演示

该正则表达式将匹配以字母数字开头的字符串(一个或多个),然后是零个或多个由单个空格和一个或多个字母数字组成的块。

作为替代方案,这是一种基于前瞻的正则表达式(但效率较低):

^(?!.* {2})(?=\S)(?=.*\S$)[a-zA-Z0-9 ]+$

请查看正则表达式演示 (?!.* {2})代表不允许连续空格,(?=.*\S$)要求字符串结尾处有非空白字符,(?=\S)要求字符串开头处有非空白字符。

1
不错。虽然另一个方法无法识别有效的单字符字符串。 - Brendan Abel
2
非常顺利地完成了工作。非常感谢! - Bill
@wiktor-stribiżew,我在命名捕获中遇到了尾随空格的问题,但无法使其正常工作,您能否指导我缺少什么?RegExp链接 我正在尝试实现的是匹配搜索项中必须包含单词“contact”。 - HenonoaH
@wiktor-stribiżew 我也期望最后一个输入(一个单词)能匹配。这可能吗?期望结果 - HenonoaH

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