正则表达式-匹配密码验证(密码强弱等级,不能匹配中文,匹配数字 字母 字符)
分享一下我前段时间写的匹配密码强度的正则表达式
弱 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。
第四次以此类推······
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: tp3.2.3 怎么把带有html标签的文本正确输出
- 下一篇: ecshop array_shift