如何在 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+ 个字符之后不能有任何 Test
或 TesT
等
.*
- 任何 0+ 个字符,尽可能多
$
- 字符串结束。
【讨论】:
以上是关于如何在 C# 中添加不区分大小写的表单字段验证?的主要内容,如果未能解决你的问题,请参考以下文章