12

我们正在使用标准的 ASP.NET 身份验证提供程序(AspNetSqlMembershipProvider,因为它发生了),并且默认密码强度要求对于我们的需求来说有点过分。

我们要求我们的用户输入至少包含字母数字的密码(即,如果用户愿意,可以输入字母和至少一个强制数字、混合大小写和非字母数字字符)。

谁能建议什么 PasswordStrengthRegularExpression 设置可以实现这一点?

此外,如果用户尝试使用的密码未通过正则表达式检查,我们如何控制向用户显示的错误消息?

笔记

发现该minRequiredNonalphanumericCharacters属性必须设置为0,否则此设置会覆盖任何使用的正则表达式

4

2 回答 2

43

我们刚刚实现了以下表达式来验证 8 到 16 个字符的密码,并包含以下 4 项中的 3 项:大写字母、小写字母、符号、数字

(?=^[^\s]{8,16}$)((?=.*?\d)(?=.*?[A-Z])(?=.*?[a-z])|(?=.*?\d)(?=.*?[^\w\d\s])(?=.*?[a-z])|(?=.*?[^\w\d\s])(?=.*?[A-Z])(?=.*?[a-z])|(?=.*?\d)(?=.*?[A-Z])(?=.*?[^\w\d\s]))^.*

单个组件的解释:

  • (?=^[^\s]{8,16}$) - 包含 8 到 16 个非空白字符
  • (?=.*?\d) - 包含 1 个数字
  • (?=.*?[AZ]) - 包含 1 个大写字符
  • (?=.*?[az]) - 包含 1 个小写字符
  • (?=.*?[^\w\d\s]) - 包含 1 个符号

请注意,在长度段之后是双括号,稍后在表达式中您会看到几个 |。这允许对允许的 4 种可能组合进行非此即彼的比较。

写完这篇文章后,我才注意到一年多以前有人问过这个问题。由于我在搜索中遇到了这个问题,我希望其他人也可以从我们的解决方案中受益。

于 2010-05-18T19:24:36.657 回答
16

这是一个允许所有字符并且需要至少一个数字和至少 6 个字符的正则表达式。

^.*(?=.{6,})(?=.*\d).*$

如果您想定义更多或更少的字符,只需更改(?=.{6,})以反映您想要的最少字符数。

于 2009-01-15T17:29:13.460 回答