密码复杂度的正则表达式

5

我正在尝试通过正则表达式在客户端(JavaScript)和服务器端(ASP.NET C#)上实现密码复杂性的强制执行。

以下是规则:

  • 必须是8-40个字符
  • 必须包含至少一个数字
  • 必须包含至少一个小写字母
  • 必须包含至少一个大写字母
  • 必须包含至少一个特殊字符

请帮忙构建验证上述要求所需的正则表达式?


4
相关xkcd漫画:http://xkcd.com/936/该漫画描绘了使用常见单词和数字组成密码的危险性。这种类型的密码易于被计算机程序猜测和破解,因此建议使用随机字符序列作为更安全的密码。 - Sam
1
不要试图使用一个正则表达式来完成。请参见我的答案:http://stackoverflow.com/a/18642031/8454 - Andy Lester
你能定义什么是特殊字符吗? - Casimir et Hippolyte
请遵循斯坦福大学制定的规则:http://itservices.stanford.edu/service/accounts/passwords/quickguide - Ulugbek Umirov
1
@Sam 已更改为检查长度。感谢您的帮助。 - ahmed.eltawil
显示剩余2条评论
1个回答

11

在这里尝试使用这个正则表达式:

((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{8,40})

(           # Start of group
  (?=.*\d)      #   must contains one digit from 0-9
  (?=.*[a-z])       #   must contains one lowercase characters
  (?=.*[A-Z])       #   must contains one uppercase characters
  (?=.*[@#$%])      #   must contains one special symbols in the list "@#$%"
              .     #     match anything with previous condition checking
                {8,40}  #        length at least 8 characters and maximum of 40 
)       

我本来想说只用一个正则表达式是不可能的。没想到还有向前查看。真棒。 - M'vy
2
你需要添加锚点以确保字符数不超过40个。 - Casimir et Hippolyte
你的回答对我所提出的问题确实有效,非常感谢你的帮助。最终,我改变了我的代码,只检查了长长度要求,因为我意识到所有这些限制并不一定使其更安全。 - ahmed.eltawil
我该如何将此更改为至少包含2个大写字母? - J86

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