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

20
注意:我认为这个问题不是这个问题的重复。我的问题涉及到 asp.net core identity 默认的密码验证规则以及如何制定它的正则表达式,而链接的问题是讨论一般的密码验证行为(这并不能解决我的问题)。
ASP.NET Core 启用了默认的密码验证规则:
  1. 最少 8 个字符。
  2. 至少有一个数字。
  3. 至少有一个大写字母。
  4. 至少有一个小写字母。
  5. 至少有一个特殊字符(哪些特殊字符是允许的?)。
记住这些条件,我尝试制作了以下正则表达式,但它不起作用。
^((?=.*?[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
@CodeFuller 已更新 - Karan Desai
3
您的假设是不正确的。密码规则是通过 PasswordOptions 进行配置的,其默认长度为6个字符,其中至少包含一个唯一字符、一个非字母数字字符、一个小写字符、一个大写字符和一个数字字符。虽然规则可以进行配置,但作为正则表达式来使用就没有太多意义。为什么您希望将此作为正则表达式呢? - poke
4
我希望这件事在客户端处理。所以在输入时,我也会在客户端进行验证。 - Karan Desai
1个回答

40
所以,请使用 <\p>
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$^+=!*()@%&]).{8,}$
  • ^: 开始行
  • (?=.*[a-z]) : 至少含有一个小写字母
  • (?=.*[A-Z]) : 至少含有一个大写字母
  • (?=.*\d) : 至少含有一个数字
  • (?=.*[#$^+=!*()@%&] ) : 至少含有一个特殊字符
  • .{8,} : 最少8个字符
  • $ : 结束行

了解更多信息请查看 此链接


7
较新版本的ASP.NET Core不再限制特殊字符,因此任何不是拉丁字母或数字的字符都被视为特殊字符。正确的正则表达式应该是: ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^a-zA-Z\d]).{8,}$ 来源:https://github.com/aspnet/AspNetIdentity/blob/b7826741279450c58b230ece98bd04b4815beabf/src/Microsoft.AspNet.Identity.Core/PasswordValidator.cs#L58 - arni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接