一、概念
零宽断言:零宽度的匹配,匹配到的内容不保存在匹配结果中,最终匹配的结果只是一个位置。
作用:给指定位置添加一个限定条件,用来规定此位置之前或者之后的字符必须满足限定条件才能使正则中的子表达式匹配成功。
正向零宽断言: (?=EXP) 该位置后的字符必须满足EXP
负向零宽断言: (?!EXP) 该位置后的字符必须不满足EXP
二、实践
密码复杂度:口令长度至少为8位,并由数字、大小字母与特殊字符组成。
数字:(?=.*\d) 包含数字
小写: (?=.*[a-z])
大写:(?=[A-Z])
特殊字符:(?=.*[\W_])
所有字符:.
/^(?=.*\d)(?=.*[a-z])(?=[A-Z])(?=.*[\W_]).{8,}$/
测试:
zhju&123 //缺少大写 false
Zhjun123 //缺少特殊字符 false
Zhjun$%^& //缺少数字 false
Zh$123 //不满8位 false
Zhju&123 true