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

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

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

匹配:

  • 测试
  • 测试 abc

不匹配:

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

【问题讨论】:

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

标签: asp.net regex


【解决方案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*$

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    相关资源
    最近更新 更多