【问题标题】:Regular Expression validation in ASP.NET for special charsASP.NET 中针对特殊字符的正则表达式验证
【发布时间】:2015-07-08 08:26:24
【问题描述】:

我需要在 Regex 中验证场景,我在 ASP.NET 中使用正则表达式验证。

  1. 不应以 SPACE 开头或结尾
  2. 不只包含空格
  3. 整个字符串不应包含两个特殊字符“@”和“?”

有效:

"as#d qwe2", "&^%$$(&+_", "12#$.p"

无效:

"  ", "asd ", " asd#", "ksdhf?kh", "asdf@asd"

我正在尝试这个:

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="TextBox1"
        ErrorMessage="RegularExpressionValidator" 
        ValidationExpression="^[^\s]+(\s+[^@?]+)*[^\s]$">Error</asp:RegularExpressionValidator>

【问题讨论】:

  • 你有没有尝试过?
  • 用“^[^\s]+(\s+[^@?]+)*[^\s]$”试过了,没用...

标签: asp.net .net regex validation


【解决方案1】:

未经测试的正则表达式:^([^ @?][^@?]*[^ @?]|[^ @?])$

【讨论】:

  • 您使用的是哪种正则表达式引擎? .NET 的 Regex.IsMatch (" ", @"^[^ ][^@?]*[^ ]$") 返回 false
  • 这允许字符串以 [@?] 开始/结束,并且不允许单字符字符串。
  • 不错 - 改进了。
【解决方案2】:

您当前使用的正则表达式存在几个问题:

  1. ^[^\s]+ 匹配几乎所有不以空格字符开头的字符串(因此匹配@?)。

  2. 由于正则表达式的构造方式,您只能输入长度为 2 及以上的字符串。这是一个小挫折,但可以避免。

我建议使用负前瞻,因为对第一个字符有多个“检查”:

^(?!\s|.*\s$)[^?@]+$

如果字符串以\s 开头或以\s[^?@]+ 结尾,则(?!\s|.*\s$) 将阻止匹配除?@ 之外的所有字符。只有空格的字符串将自动被拒绝,因为只有空格的字符串必须以空格开头。

【讨论】:

  • 如果我只提供空格,那么 aspx 页面会被回发,理想情况下它不应该......你测试了吗?
  • @user3398663 我没有 aspx 来实现您在问题中的代码,但我已经在使用基于 C#/ASP.NET 的正则表达式引擎的正则表达式工具中对其进行了测试,以上不匹配只有空格的字符串。
  • @user3398663 也许您可以尝试使用实际空格“”而不是\s?只是一个想法。
  • @user3398663 我找到了一个在线 IDE,它似乎在 C# 中工作 fine。其他以空格开头和/或结尾的字符串是否也被回发?
  • 以下字符串工作正常:“ a”、“ a”、“a”.....但只有空格不起作用。
猜你喜欢
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-22
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
相关资源
最近更新 更多