【问题标题】:RegularExpressionValidator - validate that a string does NOT match an expressionRegularExpressionValidator - 验证字符串与表达式不匹配
【发布时间】:2012-09-21 08:27:00
【问题描述】:

我正在尝试编写一个正则表达式(用于 ASP.NET RegularExpressionValidator),以便:

如果要验证的字符串包含字母 A 后跟字母 B,则验证应该失败。

如果要验证的字符串包含字母 F 后跟 W、X、Y、Z 或任何数字,则验证应该失败。

我想出了这个

(AB)|(F(W|X|Y|Z|[0-9]))

但据我所知,如果输入与该表达式匹配,则验证将成功。

如果输入与该表达式不匹配,我需要怎么做才能使验证失败?

非常感谢,

大卫

【问题讨论】:

    标签: c# asp.net regex


    【解决方案1】:

    这就是negative lookaheads 的用途

    (?!.*AB)(?!.*F[WXYZ\d])
    

    在这些字符串上失败。它还没有匹配任何文本(如果您要做的只是检查是否有匹配就足够了),因此匹配结果将始终为空字符串

    【讨论】:

      【解决方案2】:

      这可行:

      A[^B]|F[^WXYZ0-9]|[^AF].
      
      • A 后跟除 B 以外的任何内容,或
      • F 后跟除 W、X、Y、Z 或数字以外的任何内容,或
      • A 或 F 后跟任何单个字符的其他内容

      请注意,这也将匹配“A$”或“@@”。如果你只想匹配“一个字母后跟一个字母或数字”,那么使用这个:

      A[AC-Z0-9]|F[A-V]|[B-EG-Z][A-Z0-9]
      

      正则表达式更擅长正向匹配。

      注意,对于正则表达式验证器,整个字符串必须匹配(如果只有一个子字符串匹配,验证器会报告验证失败)

      【讨论】:

        【解决方案3】:

        您可以使用您的编程语言提供的逻辑非运算符来否定匹配操作返回的结果,无需修改您的正则表达式。

        编辑:如果以上不是选项,请查看这些问题123

        【讨论】:

        • 是的,但这在正则表达式验证器中不起作用,您需要一个 CustomValidator 。
        【解决方案4】:

        你可以对这个正则表达式进行匹配

        ^(?!^.*?AB)(?!^.*?F[WXYZ\d]).*$
        

        Here 一个工作示例。基本上它的意思是“找到所有字符串,除了包含 AB 的字符串,前后有任意数量的字符,除了那些包含 F 后跟 W、X、Y、Z 或数字的字符串”。 Tim Pietzcker 的回答中提供了this 链接中的信息

        【讨论】:

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