如何在 C# 中添加不区分大小写的表单字段验证?

Posted

技术标签:

【中文标题】如何在 C# 中添加不区分大小写的表单字段验证?【英文标题】:How to add case insensitive form field validation in C#? 【发布时间】:2017-07-18 04:07:06 【问题描述】:

我正在尝试向表单字段添加验证,以便如果它包含某个单词,则会显示错误。目前我有这个:

Validation.Add("field-1", Validator.Regex("^((?!TEST)(?!test).)*$", "Field may not contain 'test'"));

这适用于“TEST”和“test”,但不会阻止某人输入“tESt”。

我尝试添加不区分大小写的标志,但这使得正则表达式完全停止工作:

Validation.Add("field-1", Validator.Regex("/^((?!TEST)(?!test).)*$/i", "Field may not contain 'test'"));

我还读到 here 说 (?i) 可以用来忽略大小写,但这也不起作用 - 也许我把它放在错误的地方:

Validation.Add("field-1", Validator.Regex("^((?i)(?!TEST)(?!test).)*$", "Field may not contain 'test'"));

如果不添加“测试”的所有可能变体,这是否可行?

【问题讨论】:

试试"(?i)^(?!.*TEST).*$"。看来您的 "^((?i)(?!TEST)(?!test).)*$" 也应该可以工作(尽管这里的缓和的贪婪令牌是“矫枉过正”)。 不走运。似乎 (?i) 的任何变化都会杀死整个事情。 这是否意味着您在客户端运行它? (?i) 在 JS 中不起作用,它只能在 .NET 中起作用(嗯,以及其他一些正则表达式风格)。 对,JS 永远不会理解(?i)。你必须使用^(?!.*[Tt][Ee][sS][tT]).*$ 发表了一些解释。 【参考方案1】:

使用带有RegexOptions.IgnoreCase 参数的Regex 类的实例。

Regex validator = new Regex(@"TEST", RegexOptions.IgnoreCase);

if(validator.IsMatch(formValue))

    // Do something about this

【讨论】:

【参考方案2】:

您的正则表达式似乎是在客户端处理的。 javascript RegExp 不支持 (?i) 内联修饰符(它不支持任何内联修饰符,甚至是 XRegExp 库),因此唯一的出路是使用字符类拼出所有字母大小写:

Validation.Add("field-1", Validator.Regex("^(?!.*[Tt][Ee][sS][tT]).*$", "Field may not contain 'test'"));

请注意,您的缓和贪婪令牌过于耗费资源,在这里使用简单的负前瞻更容易。如果需要支持多行字符串,请将@​​987654325@ 替换为[\s\S] 字符类。

详情

^ - 字符串开头 (?!.*[Tt][Ee][sS][tT]) - 在任何 0+ 个字符之后不能有任何 TestTesT.* - 任何 0+ 个字符,尽可能多 $ - 字符串结束。

【讨论】:

以上是关于如何在 C# 中添加不区分大小写的表单字段验证?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置MySQL中表的大小写区分

如何使字段不区分大小写且唯一?

Mongoose 模式:验证唯一字段,不区分大小写

Mongoose 模式:验证唯一字段,不区分大小写

tp5.1 验证规则 验证数字

如何在提交表单之前验证电子邮件字段不为空