一个明智的PasswordStrengthRegularExpression

时间:2009-01-15 17:17:11

标签: asp.net authentication passwords

我们正在使用标准的ASP.NET身份验证提供程序(AspNetSqlMembershipProvider),并且defualt密码强度要求对我们的需求有点过分。

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

有人可以建议PasswordStrengthRegularExpression设置会实现这个目标吗?

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

注意

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

2 个答案:

答案 0 :(得分:40)

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

(?=^[^\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个数字
  • (?=。*?[A-Z]) - 包含1个大写字符
  • (?=。*?[a-z]) - 包含1个小写字符
  • (?=。*?[^ \ w \ d \ s]) - 包含1个符号

在长度段之后注意双重parens,然后在表达式中你会看到几个| s。这允许对/或允许的4种可能组合进行比较。

写完这篇文章之后我才注意到这个问题是在一年前提出来的。由于我在搜索中遇到过这个问题,我希望其他人也能从我们的解决方案中受益。

答案 1 :(得分:16)

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

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

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