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

时间:2010-04-14 21:37:14

标签: .net regex validation

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

我不能以编程方式使用RegexOptions,因为我在RegularExpressionValidator中指定了正则表达式

5 个答案:

答案 0 :(得分:51)

我发现了。

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

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

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

答案 1 :(得分:22)

使用RegEx Options

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

在其他语言中,您通常可以在Reg Ex结束后指定RegEx修饰符; 'case insensitive'修饰符是'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)) {
    // ...
}

答案 2 :(得分:4)

我知道很久以前就已经回答了这个问题,并且是其他重复问题中最好的答案。这是一个使用CustomValidator的替代方案,当真正需要服务器端和客户端不区分大小写时;并且上/下[A-Za-z] char方法太多了。

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

的CustomValidator:

<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。在客户端验证中,错误*显示,但我无法在摘要中显示错误消息。摘要仅在提交时显示。我认为它应该显示;我有更新面板和遗留代码的混合,这可能是问题。

答案 3 :(得分:3)

最简单的方法就是将正则表达式修改为

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

阅读起来很糟糕,但它会正常工作。

答案 4 :(得分:1)

我们可以制作Regex case-insensitive in C#吗? :

  

通过(?i) pattern constructRegexOptions.IgnoreCase param

设置内联选项

我们可以制作Regex case-insensitive in JavaScript吗? :

  

通过/pattern/flags语法或不敏感标记/REGEX/i

设置标记

除了)我们可以Regex case-insensitive in HTML5 Pattern Attribute?

Chris R. Timmons指出RegularExpressionValidator doesn't ignore case

  

RegularExpressionValidator控件中没有属性   允许设置正则表达式选项。

     

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

     

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

所以,如果你想使用开箱即用的验证器,你就会遇到Geoff使用这样的字符集的解决方案:[aA]