【问题标题】:ASP.NET RegularExpressionValidator, validate on a non-match?ASP.NET RegularExpressionValidator,验证不匹配?
【发布时间】:2015-10-15 17:59:44
【问题描述】:

有没有办法只在 ValidationExpression 不匹配时才使用 RegularExpressionValidator 进行验证?特别是使用邮政信箱正则表达式来验证不是邮政信箱的地址。

谢谢!

【问题讨论】:

    标签: asp.net regex


    【解决方案1】:

    您可以使用negative look-ahead 有效地反转您的正则表达式。

    例如,考虑以下仅匹配数字字符串的正则表达式:

    ^\d+$
    

    这个表达式可以倒置如下:

    ^(?!\d+$).*$
    

    【讨论】:

      【解决方案2】:

      只需使用 NegativeRegularExpressionValidator :)

      [ToolboxData("<{0}:NegativeRegularExpressionValidator runat=\"server\" ErrorMessage=\"NegativeRegularExpressionValidator\"></{0}:NegativeRegularExpressionValidator>")]
      public class NegativeRegularExpressionValidator : RegularExpressionValidator
      {
          protected override bool EvaluateIsValid()
          {
              return base.EvaluateIsValid() == false;
          }
      }
      

      【讨论】:

      • 很好,我要试一试。 ty
      • 不幸的是,与客户端无关 :(。感谢您指出这一点。我的目的是提供一个想法,而不是更多。
      【解决方案3】:

      创建一个验证不是 PO BOX 的正则表达式或使用自定义验证器。

      【讨论】:

      • 我同意,这将是理想的。但是反转现有的正则表达式并非易事?
      • 这取决于正则表达式本身,但据我所知,整个表达式没有神奇的“不”开关。
      • 对,字符可以被否定,但不是整个表达式(据我所知)。同时它是一个自定义验证器。
      【解决方案4】:

      Mike Chaliy 的解决方案非常好,但在客户端无法验证。

      我认为您应该使用custom validator control 并编写一个验证不是 POBox 的 javascript 函数。从正则表达式验证器复制模式并使用this site 编写您自己的客户端验证。

      【讨论】:

        【解决方案5】:

        客户端脚本的另一种解决方案:

        <asp:TextBox runat="server" ID="MYiD" />
        
        
        <asp:CustomValidator runat="server" ControlToValidate="MyId" ErrorMessage="Wrong"
            ClientValidationFunction="ClientValidate" />
        
        
        
        <asp:Button runat="server" OnClick="OnClick" />
        
        <script language="javascript"> 
        function ClientValidate(source, arguments)
        {
            var value = arguments.Value;
            var res = value.match('abc');       
            arguments.IsValid = (res == null || res === undefined);
        }
        </script>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多