有效的 RegEx 不适用于 ASP.Net MVC 正则表达式属性
Posted
技术标签:
【中文标题】有效的 RegEx 不适用于 ASP.Net MVC 正则表达式属性【英文标题】:Valid RegEx doesn't work with ASP.Net MVC RegularExpression attribute 【发布时间】:2019-04-10 02:39:26 【问题描述】:我有一个正则表达式来验证密码规则。
在 .Net 控制台应用程序中,它按预期正确拒绝或验证密码。
var strongRegex = new Regex("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^a-zA-Z0-9])");
Console.WriteLine(strongRegex.IsMatch("Test_1234"));
这如预期的那样返回“true”。
当我在一个 ASP.Net MVC 项目中将它添加到我的模型中时,这个相同的值被 jQuery 在客户端上的不显眼的验证所拒绝。
[RegularExpression("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^a-zA-Z0-9])"]
由于阅读了先前框架版本中的区分大小写问题,我查看了页面源以查看其呈现方式,但此处似乎并非如此……它在@987654325 上呈现以下内容@元素:
data-val-regex-pattern="^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^a-zA-Z0-9])"
这会导致在控制台应用程序(“Test_1234”)中工作的相同值无法通过客户端验证。
【问题讨论】:
你确定它不起作用吗?好像有效,可以在这里验证regex101.com/r/ZQrWJO/1 您的正则表达式仅包含断言。尝试它也匹配例如.*
like ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^a-zA-Z0-9]).*$
@Patrick - javascript 和 .NET 使用略有不同的正则表达式解释器。要与 Javascript 一起使用,请在 regexr.com 使用 Skinner 的工具测试您的表达式
旁注:最后一位--[^a-zA-Z0-9]
--允许将任何内容作为有效字符放入。这包括 ASCII 开头的控制字符以及 Unicode 集中高于 ASCII 的任何内容。这是你想要的吗?
@ClayVerValen 除了防止下划线(和一些其他非英文字符)之外,效果相同。
【参考方案1】:
您的密码验证规则似乎是:
-
必须至少有 1 个数字
必须至少有 1 个大写字符
必须至少有 1 个小写字符
必须至少有 1 个其他字符不符合前三个规则之一。
如果我没看错,试试这个:
^((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9])).*
【讨论】:
以上是关于有效的 RegEx 不适用于 ASP.Net MVC 正则表达式属性的主要内容,如果未能解决你的问题,请参考以下文章
asp.net webform:RegisterClientScriptBlock 不适用于 jquery