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

js正则表达式要求:

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

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

3、不包含root字符串

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}$/

猜你喜欢

转载自blog.csdn.net/chuanxincui/article/details/83820043