js正则表达式 必须包含数字、字母、指定特殊字符且不包含root

js正则表达式要求:

1、必须包含数字、大写字母、小写字母、特殊符号且长度在10到20之间

2、特殊符号包括: !@#$%^&*()

3、不包含root字符串

 

补充一下:有些朋友问到

“最少包含2个大写字母、2个小写字母、2个数字、2个指定的特殊字符、长度10到20”

应该怎么处理?其实很简单只要将断言写两遍即可

例如

只要将下面的js代码中的
var contentPattern = /^(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*()])[\da-zA-Z!@#$%^&*()]{10,20}$/;

修改成成
var contentPattern = /^(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*()])(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*()])[\da-zA-Z!@#$%^&*()]{10,20}$/;
即可

js代码

$(function(){

})
  function checkPassWord(psd){
	var psd=$("#psd").val();
	var contentPattern = /^(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*()])[\da-zA-Z!@#$%^&*()]{10,20}$/;
	var rootPattern=/^((?!root).)*$/;
	
	if(!contentPattern.test(psd)){
		console.log("最少包含1个大写字母、1个小写字母、1个数字、一个指定的特殊字符、长度10到20");
		 return "最少包含1个大写字母、1个小写字母、1个数字、一个指定的特殊字符、长度10到20"";
	}
    if(!rootPattern.test(psd)){
		console.log("密码不能包含“root”");
		return "密码不能包含“root”";
	}

  }

html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
  <script type="text/javascript" src="../js/jquery-1.11.3.min.js"></script>
  <script type="text/javascript" src="../js/regTest.js"></script>
</head>
<body>
<input type="test" id="psd">
<input type="button" id="btn" value="测试" onclick="checkPassWord()">


</body>
</html>

解释:

这里主要用到了js正则表式中的正向前瞻 ?=,举个例子

/\d/.exec( 'abc2abc' ) 匹配结果为2,释义:匹配一个数字

/\d(?=a)/.exec( 'abc2abc' ) 匹配结果为2,释义:匹配一个数字,但是这个数字后面必须跟着字母a

/\d(?=a)/.exec( 'abc2bc' ) 匹配结果为null

由此可以看出,?= 匹配结果中不包含它所匹配的字符,但是待匹配字符串必须符合它所对应的规则

当有多个正向前瞻规则时它们是并列的,不是串行的,比如

/\d(?=a)(?=b)/.exec( 'abc2abc' ) 匹配结果为null,那如果想匹配一个数字,后面必须跟着字母a和b可以这样写

/\d(?=a)(?=.b)/.exec( 'abc2abc' ),当然这是为了演示它的规则,其实可以这样写/\d(?=ab)/.exec( 'abc2abc' )

 

对于/^(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*()])[\da-zA-Z!@#$%^&*()]{10,20}$/

其实整个正则表示可以分为四部分:

/^(?=.*\d)[\da-zA-Z!@#$%^&*()]{10,20}$/

/^(?=.*[A-Z])[\da-zA-Z!@#$%^&*()]{10,20}$/

/^(?=.*[a-z])[\da-zA-Z!@#$%^&*()]{10,20}$/

/^(?=.*[!@#$%^&*()])[\da-zA-Z!@#$%^&*()]{10,20}$/

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值