JS使用正则表达式RegExp()验证密码的问题记录

文章讲述了在JavaScript中验证密码是否符合特定规则的过程,包括需要包含大写字母、小写字母、数字和特殊符号,长度在8-15位。作者遇到了在正则表达式在线测试工具中有效,但在实际项目中使用match函数返回null的问题。问题出在双引号的使用以及在对象中使用正则表达式时的处理。最终解决方案是通过创建新的RegExp对象来正确解析包含特殊字符的正则表达式字符串。
摘要由CSDN通过智能技术生成

需求:在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("密码格式有误!!");
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值