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

时间:2025-02-14 21:22:26

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(!(psd)){
		("最少包含1个大写字母、1个小写字母、1个数字、一个指定的特殊字符、长度10到20");
		 return "最少包含1个大写字母、1个小写字母、1个数字、一个指定的特殊字符、长度10到20"";
	}
    if(!(psd)){
		("密码不能包含“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."></script>
  <script type="text/javascript" src="../js/"></script>
</head>
<body>
<input type="test" >
<input type="button"  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}$/