有效的 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 标识

注销功能不适用于 ASP.NET 标识

asp.net webform:RegisterClientScriptBlock 不适用于 jquery

ASP.NET MVC 验证不适用于引导模式

ASP.NET ScriptBundle 不适用于 .min.js?

jquery 类更改为 div 不适用于 asp,net