【问题标题】:Whitespace in a current regex当前正则表达式中的空格
【发布时间】:2015-10-23 14:29:58
【问题描述】:

我目前正在使用以下正则表达式:^[^&<>\"'/]*$,我还想添加一个验证,用户不能只在我的文本框开头输入空格。有什么想法吗?注意:允许空格,但不能作为第一个元素

【问题讨论】:

  • 只需将其添加到字符类中:^[^&<>\"'/ ]*$@"^[^&<>""'/\p{Zs}]*$"
  • 感谢您的快速回复!我没有正确解释自己的错误...我的意思是我只是不希望用户以空格开头或将文本框留空并仅放置空格@soner
  • 给出几个有效和无效的输入例子????
  • 那就试试^(?=\\P{Zs})[^&<>\"'/]*$

标签: c# html regex whitespace


【解决方案1】:

消极的前瞻是去这里的方式:^(?! )[^&<>\"'\/]*$

(?! ) 表示仅当下一个字符不是空格时才匹配。因为它就在 ^ 锚点之后,这实际上意味着仅当第一个字符不是空格时才匹配。

【讨论】:

  • 请注意,这种方式您只能控制文字常规空间。您可以使用\p{Zs} 来控制任何水平空白。
  • 我避免使用\p 语法,除非绝对必要,因为它没有被广泛接受。在这种情况下,它在 JavaScript 中不起作用,并且问题指出正则表达式用于 HTML 验证目的。
【解决方案2】:

这是另一种选择:您可以通过将\p{Zs} Unicode 类别类添加到您的正则表达式来允许输入任何空格(硬空格或常规空格)。

为了确保你仍然可以匹配一个空字符串,你需要在字符串的开头使用一个look-ahead锚定(也就是说,你必须在^ start-of-string anchor之后使用它):

^(?!\p{Zs})[^&<>"'/]*$
//^^^^^^^^^        

我强烈建议使用verbatim string literals in C# 来声明正则表达式,因为您不必考虑需要使用多少个反斜杠:

var rx = new Regex(@"^(?!\p{Zs})[^&<>""'/]*$");

请注意,您需要将这些文字中的引号加倍以声明单个双引号。

C# demo:

var rx = new Regex(@"^(?!\p{Zs})[^&<>""'/]*$");
Console.WriteLine(rx.IsMatch("")); // true - empty string
Console.WriteLine(rx.IsMatch(" sapceAtStart")); // false - space at start
Console.WriteLine(rx.IsMatch(" sapceAtStart")); // false - Hard space at start
Console.WriteLine(rx.IsMatch("space not at start")); // true - space not at start

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 2012-02-02
    • 2017-05-02
    • 1970-01-01
    • 2016-08-18
    • 2013-12-16
    • 2014-08-13
    相关资源
    最近更新 更多