代码之家  ›  专栏  ›  技术社区  ›  Jeremy

在ASP.NET RegularExpressionValidator中使正则表达式不区分大小写

  •  36
  • Jeremy  · 技术社区  · 14 年前

    给定此正则表达式: "^[0-9]*\s*(lbs|kg|kgs)$" 如何使其不区分大小写?我正试图在.NET正则表达式验证器中使用它,因此需要在模式中指定大小写不敏感。

    我无法以编程方式使用regexoptions,因为我在regularExpressionValidator中指定正则表达式

    5 回复  |  直到 6 年前
        1
  •  50
  •   CodeZombie    10 年前

    我发现了。

    区分大小写: ^[0-9]\s(lbs|kg|kgs)$

    不区分大小写: (?i:^[0-9]\s(lbs|kg|kgs)$)

    我认为这是特定于正则表达式的.NET实现的。因此,如果在RegularExpressionValidator中使用此方法,则必须关闭客户端验证,因为JavaScript正则表达式解析器无法识别 ?i 令牌。

        2
  •  22
  •   Richard JP Le Guen    14 年前

    使用 RegEx Options .

    Regex regExInsensitive = new Regex(@"^[0-9]\s(lbs|kg|kgs)$", RegexOptions.IgnoreCase);
    

    在其他语言中,通常可以在reg ex结束后指定regex修饰符;“不区分大小写”修饰符是“i”:

    在Perl:

    if($var =~ /^[0-9]\s(lbs|kg|kgs)$/i) { # the /i means case insensitive
        # ...
    }
    

    在PHP中:

    if(preg_match("/^[0-9]\s(lbs|kg|kgs)$/i", $var)) {
        // ...
    }
    
        3
  •  4
  •   goodeye    11 年前

    我知道这是很久以前的答案,是其他重复问题中最好的答案。在真正需要不区分大小写的服务器端和客户端时,可以使用customvalidator;而上/下[a-za-z]char方法太多。

    这将使用服务器端regex对象和客户端javascript语法混合其他各种答案。

    客户验证程序:

    <asp:CustomValidator ID="cvWeight" runat="server" ControlToValidate="txtWeight"
      OnServerValidate="cvWeight_Validate" ClientValidationFunction="cvWeight_Validate"
      ValidateEmptyText="true" Text="*" ErrorMessage="Invalid entry." />
    

    代码落后:

    protected void cvWeight_Validate(object sender, ServerValidateEventArgs args)
    {
        Regex re = new Regex(@"^[0-9]*\s*(lbs|kg|kgs)$", RegexOptions.IgnoreCase);
        args.IsValid = re.IsMatch(args.Value);
    }
    

    客户端验证功能:

    function cvWeight_Validate(sender, args) {
      var reWeight = /^[0-9]*\s*(lbs|kg|kgs)$/i;
      args.IsValid = reWeight.test(args);
    }
    

    这对我来说很好,除非使用validationsummary。在客户端验证中,错误 * 显示,但无法在摘要中显示错误消息。摘要仅在提交时显示。我认为它应该显示;我有一个更新面板和遗留代码的组合,这可能是个问题。

        4
  •  3
  •   Geoff Reedy    14 年前

    这里最简单的是将regex修改为

    ^[0-9]*\s*([lL][bB][sS]|[kK][gG][sS]?)$
    

    读起来很糟糕,但会很好的。

        5
  •  0
  •   KyleMit    6 年前

    我们能做到吗? Regex case-insensitive in C# ?: 是的

    通过设置选项内联 (?i) pattern construct 或通过 RegexOptions.IgnoreCase 参数

    我们能做到吗? Regex case-insensitive in JavaScript ?: 是的

    通过设置标志 / pattern / flags 语法或不敏感标志 /REGEX/i

    ( 旁白 )我们能 Regex case-insensitive in HTML5 Pattern Attribute ? :

    正如克里斯·R·蒂蒙斯指出的 RegularExpressionValidator doesn't ignore case :

    RegularExpressionValidator控件中没有属性 允许设置regex选项。

    如果控件同时执行客户端和服务器端验证, 这个 regex必须使用正则表达式语法的子集 js和.net可以执行 . 在这种情况下,要使regex忽略 有必要使用字符类构造,如 [a-zA-Z] 匹配大小写字符。

    如果只在服务器端进行验证,则可以使用 更强大的.NET正则表达式语法。在这种情况下,你可以 放置 ?i) 在regex开头的选项告诉它 忽略案例。

    所以,如果你想使用开箱即用的验证器,你就必须使用geoff的解决方案来使用如下字符集: [aA]