今天老板要求我们网站密码规则必须包含大写字母小写字母,数字和特殊字符,且长度大于8位,30天未登陆锁定账号,35天必须修改密码,且最近12次密码不能相同。
下面介绍一下我是怎么验证密码复杂度验证的,什么超期锁定,修改密码的,对比一下上次登陆或修改的时间就OK啦。
密码复杂度验证分两部分,第一部分是验证是否包含四种不同类型的字符,第二部分就是限制长度大于8,下面我们就来实现吧,我们用正则表达式来验证:
首先,验证是否包含不同类型的字符,我首先想到的是正向肯定预查表达式(?=pattern)
,这个式子的作用是:
正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
由此我们就得到了第一部分的验证表达式:
/(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[\W_])/
上面的正则意思是至少要有一个大写字母一个小写字母,一个数字,一个特殊符号,在这里解释一下\W
这个表达式,它表示 “匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。可以看到,它是排除了下划线_
的,所以我在上面加上了下划线。
OK,第一部分完成了,剩下验证长度就小菜一碟啦,下面直接给大家写上,就不多做解释了:
/(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[\W_]).{8,}/
大功告成,谢谢大家一步步看到这里哦!