牛骨文教育服务平台(让学习变的简单)
博文笔记

正则表达式-匹配密码验证(密码强弱等级,不能匹配中文,匹配数字 字母 字符)

创建时间:2016-10-12 投稿人: 浏览次数:4559

分享一下我前段时间写的匹配密码强度的正则表达式

弱     6-16位    数字,字母,字符其中一种      或       6-7位    数字,字母,字符其中两种         或         6-7位    数字,字母,字符其中三种
中     8-16位    数字,字母,字符其中两种
强     8-14位    数字,字母,字符其中三种
最强  14-16位    数字,字母,字符其中三种

以上各个等级都不能匹配中文

//密码强弱程度(我把原来正则表达式后面的g都去掉了)
    //弱
    var week = /^([a-zA-Z]){6,16}$|^(d){6,16}$|^((?=[x21-x7e]+)[^A-Za-z0-9]){6,16}$|^(?!2+$)(?!1+$)[21]{6,7}$|^(?!3+$)(?!1+$)[31]{6,7}$|^(?!3+$)(?!2+$)[23]{6,7}$|^(?=.*3)(?=.*1)(?=.*2)[a-zA-Zx21-x7ed]{6,7}$/;
    //中:字母+数字
    var middle1 = /^(?!d+$)(?![a-zA-Z]+$)[dA-Za-z]{8,16}$/;
    //中:字母+字符
    var middle2 = /^(?!((?=[x21-x7e]+)[^A-Za-z0-9])+$)(?![a-zA-Z]+$)[^u4e00-u9fa5d]{8,16}$/;
    //中:数字+字符
    var middle3 = /^(?!((?=[x21-x7e]+)[^A-Za-z0-9])+$)(?!d+$)[^u4e00-u9fa5a-zA-Z]{8,16}$/;
    //强
    var strong = /^(?=.*((?=[x21-x7e]+)[^A-Za-z0-9]))(?=.*[a-zA-Z])(?=.*[0-9])[^u4e00-u9fa5]{8,13}$/;
    //最强
    var strongest = /^(?=.*((?=[x21-x7e]+)[^A-Za-z0-9]))(?=.*[a-zA-Z])(?=.*[0-9])[^u4e00-u9fa5]{14,16}$/;

        昨天测试发现了一个问题,比如用strong来匹配密码,strong.test("1234abcd@@") 明明应该匹配到返回true的,但是在测试中一会儿返回true,一会儿返回false。

        后来才找到原因,原因是我创建的正则表达式对象,比如strong使用了 g 执行全局匹配修饰符。

g 修饰符用于执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。

        当第一个strong.test执行时,表达式匹配成功了,得到了true,但是因为全局匹配,所有匹配并没有结束。

        第二次执行strong.test的时候,表达式执行第二次匹配,匹配的起始位置是上次匹配到的结束位置,而这个位置此时都在字符串"1234abcd@@"的末尾了,之后的字符串无法匹配表达式,所以得到false。

       这是一个循环,第三次又从字符串的开头开始匹配,所以又匹配成功,得到true。

       第四次以此类推······


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。