正则表达式密码检查器

时间:2011-11-16 16:04:52

标签: c# regex security passwords

我正在创建一些正则表达式代码,以便在客户尝试创建帐户时检查密码。目前,我有两段代码在测试时似乎有效: - http://www.regexplanet.com/simple/index.html

第一位是:

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

这可以确保:

  • 密码长度为8位数
  • 包含至少一个小写字母,一个大写字母,一个数字和一个特殊字符

第二部分是:

\S*(.)\1{3,}\S*

这可以确保:

匹配任何4个或更多连续相同的字符。

问题是,我如何将它们两者结合起来?我试图无济于事,但他们似乎一直很好地工作。

由于

3 个答案:

答案 0 :(得分:1)

您可能需要考虑允许密码大于至少12个字符。帮自己一个忙,让客户受宠,并允许客户使用大于12个字符的任何大小的密码。任何低于12的东西都非常容易暴躁。

关于你的问题,我会让其他人回答这个问题。

答案 1 :(得分:1)

如果您只是将第二个正则表达式与第一个正则表达式组合在一起,那么您将要求所有密码包含四个连续相同的字符,我很确定您要禁止。试试这个:

^(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?:(.)(?!\1{3}))+$

最后一组一次捕获一个角色,每次都做一个负面的预测,以确保它不会跟随另外三个相同的角色。请注意,我从第一个正则表达式的开头删除了.*。那从来都不属于那里,虽然之前并没有真正伤害任何事情。但是在这个正则表达式中,最后一组必须是消耗角色的唯一部分,或者它没有任何好处。

答案 2 :(得分:0)

为什么不进行两次单独的测试?上面的正则表达式模式足够复杂。将它们分开将使代码更易理解,并且还可以灵活地添加/删除其他测试,而无需触及已经工作的模式。此外,根据哪个测试失败,您可以向用户提供更详细的错误消息。