正则表达式只允许单词之间有一个空格

Posted

技术标签:

【中文标题】正则表达式只允许单词之间有一个空格【英文标题】:Regular expression to allow only one space between words 【发布时间】:2020-05-09 16:28:23 【问题描述】:

我在 ASP.NET 应用程序中有一个文本框,为此我需要使用正则表达式来验证用户输入字符串。正则表达式的要求是 -

    它应该只允许单词之间有一个空格。也就是说,单词或字符之间的空格总数应该只有一个。 它应该忽略前导和尾随空格。

匹配:

测试 测试 abc

不匹配:

测试 abc def Test abc --> 我想在两个单词之间包含多个空格。但是,编辑在发布问题时会忽略这些多余的空格。

【问题讨论】:

对匹配标准的两种不同解释表明不清楚 - 是否允许超过两个词? 为了更清楚起见,我已经编辑了这个问题。就像您指出的那样 - 由于要求是不允许单词之间有多个空格,因此它限制用户输入最多包含两个单词。 【参考方案1】:

假设必须有一个或两个“单词”(即非空格字符序列)

"\s*\S+(\s\S+)?\s*"

如果您只想允许使用字母,请将 \S 更改为 [A-Za-z]

【讨论】:

哇,表达式 "\s*\w+(\s\w+)?\s*" 非常适合空格。我看到的唯一问题是,它不允许字符串中包含任何特殊字符。我还需要允许特殊字符和数字。 @Test_User。编辑为允许任何非空格字符。【参考方案2】:

非常简单:

/^ *(\w+ ?)+ *$/

小提琴:http://refiddle.com/gls

【讨论】:

对不起,没用。即使对于没有任何空格的字符串,它也会不断抛出验证错误。 检查您的复制/粘贴,因为它使用 .NET RE 库在 refiddle 中工作。【参考方案3】:

也许这个可以?

\s*\S+?\s?\S*\s*

编辑:它是一个服务器编码的正则表达式,这意味着您可能需要删除其中一个转义斜杠。

【讨论】:

对不起,我的正则表达式很差。我正在使用您的表达式设置我的 RegEx 验证控件的 ValidationExpression 属性,它不会匹配单个单词。如果您可以对表达式进行任何必要的修改并将其发布,我将不胜感激。谢谢! 更新了我的帖子 - 再试一次。【参考方案4】:

怎么样:

^\s*(\w+\s)*\w+\s*$

【讨论】:

以上是关于正则表达式只允许单词之间有一个空格的主要内容,如果未能解决你的问题,请参考以下文章

允许单词之间有空格的正则表达式

正则表达式:匹配空格之间的单词

需要正则表达式来匹配两个单词,因为它们之间可能有任意数量的空格或其他字符

在正则表达式中,我只需要在中间允许空格,并在开头和结尾防止空格

正则表达式快速入门

验证全名的 Java 正则表达式只允许空格和字母