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

Jer*_*emy 38 .net regex validation

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

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

Jer*_*emy 51

我发现.

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

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

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

  • 实际上,大多数嵌入语言的*都支持内联修饰符,如`(?i)`:Perl,Python,PHP,Ruby,Java,.NET ...... JavaScript是最后一个坚持,它是一个正确的痛苦屁股!顺便说一句,@ Geoff确实在评论中提到了"(?i)". (4认同)
  • 如果你只是将(?i)前置到你的表达式中会更容易:(?i)^ [0-9]\s(lbs | kg | kgs)$ (2认同)

Ric*_*uen 24

使用RegEx选项.

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

在其他语言中,您通常可以在Reg Ex结束后指定RegEx修饰符; 'case insensitive'修饰符是'i':

在Perl中:

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

在PHP中:

if(preg_match("/^[0-9]\s(lbs|kg|kgs)$/i", $var)) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

  • 我正在使用dot net,并且无法指定RegexOptions,因为我没有实例化Regex对象,我在RegularExpressionValidator中指定正则表达式 (6认同)
  • 这是ASP.NET中的一个组件,请参阅http://msdn.microsoft.com/en-us/library/eahwtc9e.aspx文档说服务器端和客户端使用相同的正则表达式,所以常规表达式也应该对javascript和.NET有效.否则它可能只是在开头使用(?i)使它不区分大小写. (6认同)

goo*_*eye 5

当真正需要不区分大小写的服务器端和客户端时,这是使用 CustomValidator 的替代方案;而上/下 [A-Za-z] 字符方法太多了。

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

自定义验证器:

<asp:CustomValidator ID="cvWeight" runat="server" ControlToValidate="txtWeight"
  OnServerValidate="cvWeight_Validate" ClientValidationFunction="cvWeight_Validate"
  ValidateEmptyText="true" Text="*" ErrorMessage="Invalid entry." />
Run Code Online (Sandbox Code Playgroud)

背后代码:

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);
}
Run Code Online (Sandbox Code Playgroud)

客户端验证函数:

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

这对我来说工作得很好,除了使用 ValidationSummary 时。在客户端验证中,*显示错误,但我无法在摘要中显示错误消息。摘要仅在提交时显示。我认为它应该显示;我混合了更新面板和遗留代码,这可能会出现问题。