默认 ASP.NET Core 身份密码的正则表达式

Posted

技术标签:

【中文标题】默认 ASP.NET Core 身份密码的正则表达式【英文标题】:Regex for default ASP.NET Core Identity Password 【发布时间】:2018-07-16 01:14:43 【问题描述】:

注意:我相信这个问题不是这个question 的重复。我的问题是处理asp.net核心身份用于密码验证的默认验证规则以及如何制作它的正则表达式,而链接的问题正在讨论,一般是关于验证密码的行为(这不能解决我的问题)

ASP.NET Core 启用默认的以下密码验证

    最少 8 个字符 应该至少有一个数字 应该至少有一个大写字母 应该至少有一个小写字母 应至少包含一个特殊字符(允许使用哪些特殊字符?)

牢记这些条件,我尝试制作以下正则表达式,但它不起作用。

^((?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])|(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[^a-zA-Z0-9])|(?=.*?[A-Z])(?=.*?[0-9])(?=.*?[^a-zA-Z0-9])|(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^a-zA-Z0-9])).8,$

即使点 2,3,4,5 的三个条件中的任何一个匹配,此正则表达式也接受字符串。但我希望所有条件都满足。

我在这里做错了什么?

【问题讨论】:

当您说“它不工作”时请具体说明。哪个输入失败了? @CodeFuller 更新 您的假设正确。密码规则通过PasswordOptions配置,默认长度为6,1个唯一字符,至少1个非字母数字,1个小写,1个大写,1个数字。 – 规则是可配置的,将其作为正则表达式确实没有什么意义。为什么要将它作为正则表达式? 我希望在客户端处理这个问题。所以在输入中我也会在客户端进行验证。 【参考方案1】:

所以,使用

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$^+=!*()@%&]).8,$
^: 第一行 (?=.*[a-z]) : 应该至少有一个小写字母 (?=.*[A-Z]) : 至少应该有一个大写字母 (?=.*\d) : 至少应该有一个数字 (?=.*[#$^+=!*()@%&] ) : 至少应该有一个特殊字符 .8, :最少 8 个字符 $ : 结束行

更多信息:this

【讨论】:

最新版本的 ASP.NET Core 不限制特殊字符,因此任何不是拉丁字母或数字的都是特殊字符。正确的正则表达式应该是:^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^a-zA-Z\d]).8,$ 来源:github.com/aspnet/AspNetIdentity/blob/…

以上是关于默认 ASP.NET Core 身份密码的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

更改 Angular 和 ASP.NET Core 项目中的默认身份路由

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 14. ASP.NET Core Identity 入门

ASP.NET Core JWT/Windows 身份验证 HTTP 400 错误

没有 ASP.NET 身份的 .NET Core 外部身份验证

ASP.NET Core Web API 身份验证

有效的 RegEx 不适用于 ASP.Net MVC 正则表达式属性