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