必须包含大写字母必须包含 !@#$%&*() 中的一个至少 8 个字符(不含 \r\n)测试用例const re = /(?=.*[A-Z])(?=.*[!@#$%&*()]).{8,}/ const passwords = [ 'A@aaaaaa', // true '@aaaaaaaA', // true 'aaaaaaaa@A', // true 'aaaa@aaaAaa', // true 'aaaaaaaa', // false '@aaaaaaaa', // false 'Aaaaaaaaa', // false 'A@aaaaa', // false ] for (password of passwords) console.log(re.test(password))正则表达式手册(关键知识点:正向肯定预查)匹配过程分析假设正则表达式为 ^(?=.*[A-Z])(?=.*[!@#$%&*()]).{8,}$首先从 0 的位置开始匹配 .*[A-Z],如果成功,再回到 0 的位置匹配 .*[!@#$%&*()],如果成功,再回到 0 的位置匹配 .{8,}$。关键在于回到 0 的位置,不是预查就不行
!@#$%&*()
中的一个\r\n
)测试用例
正则表达式手册(关键知识点:正向肯定预查)
匹配过程分析
假设正则表达式为
^(?=.*[A-Z])(?=.*[!@#$%&*()]).{8,}$
首先从
0
的位置开始匹配.*[A-Z]
,如果成功,再回到0
的位置匹配.*[!@#$%&*()]
,如果成功,再回到0
的位置匹配.{8,}$
。关键在于回到0
的位置,不是预查就不行