需求:在js中验证密码框的密码是否符合要求。
密码要求:需有一个大写字母一个小写字母一个数字一个特殊符号,不能少于8位,不能大于15位
经过一通操作,写出了正则表达式如下图:
var reg = "/^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@$!%*?&])[A-Za-z\\d$@$!%*.?&]{8,15}/";
此处推荐正则表达式在线测试网站:正则表达式在线测试 | 菜鸟工具
在网站上测试了是可以通过的:
但是写到项目中使用match函数还是会输出null,于是我们使用浏览器的开发者工具进行测试,发觉是双引号的锅。
match函数中的参数传入的正则表达式是可以不用双引号引着的。
于是我们回到项目中去也用了这种方法,但是项目中的正则表达式的属性是在对象中的,我们match之后还是null,并且这种写法会导致整个password对象都变成了null,所以我们只能研究另外一种使用双引号的方式。
通过查找资料发现 RegExp() 这个正则对象可以传入一个字符串再进行匹配
做法:
var num = "123456";
var exp = new RegExp("[0-9]{6}");
num.match(exp);
使用此方法后发觉还是会报null,于是再次调试发现这个RegExp对象对字符串进行解析时会自己加上开始和结束的横杠,并且会对\进行转义
经过修改最终成品如下图:
最终正则匹配代码:
var reg = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@$!%*?&])[A-Za-z\\d$@$!%*.?&]{8,15}";
var exp = new RegExp(reg);
console.log(exp);
var val = "Aa12345671";
if(val.match(exp) === null){
alert("密码格式有误!!");
}