Javascript .match()为密码的正则表达式返回null

Javascript .match()为密码的正则表达式返回null,javascript,jquery,Javascript,Jquery,我编写了javascript代码来检查最少4个字符和最多8个字符,至少1个大写字母、1个小写字母、1个数字和1个特殊字符,但对于错误和正确的字符串,它都返回null。我不知道是什么问题。请帮忙 var password = 'okK1@'; // you can take anything var a; a = password.match("^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@@$!%*?&])[A-Za-z\d$@@$!%*?&]{4

我编写了javascript代码来检查最少4个字符和最多8个字符,至少1个大写字母、1个小写字母、1个数字和1个特殊字符,但对于错误和正确的字符串,它都返回null。我不知道是什么问题。请帮忙

var password = 'okK1@'; // you can take anything
var a;
a = password.match("^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@@$!%*?&])[A-Za-z\d$@@$!%*?&]{4,8}");
if(a == false){
  alert('false');
}
else if (a == true){
  alert('true');
}
else{
  alert('null');
}

JavaScript不支持正则表达式中的查找;也就是说,分解需求更容易:

var password = ...;

var errors = [];

if (password.length < 4 /* || password.length > 8 */) {
    errors.push("Password must be at least 4 characters");
}
if (!/[A-Z]/.test(password)) {
    errors.push("Password must contain at least one uppercase letter");
}
if (!/[a-z]/.test(password)) {
    errors.push("Password must contain at least one lowercase letter");
}
if (!/\d/.test(password)) {
    errors.push("Password must contain at least one digit");
}
if (!/[$@!%*?&]/.test(password)) {
    errors.push("Password must contain at least one special character");
}
var密码=。。。;
var错误=[];
如果(password.length<4/*| | password.length>8*/){
错误。推送(“密码必须至少为4个字符”);
}
如果(!/[A-Z]/.test(密码)){
错误。push(“密码必须至少包含一个大写字母”);
}
如果(!/[a-z]/.test(密码)){
错误。push(“密码必须至少包含一个小写字母”);
}
如果(!/\d/.test(密码)){
错误。推送(“密码必须至少包含一个数字”);
}
如果(!/[$@!%*?&]/.test(密码)){
错误。推送(“密码必须至少包含一个特殊字符”);
}

您可以使用
返回false选择提前退出
,但这样做的好处是可以准确地告诉用户他们的密码不好的原因。

为每个“规则”建立单独的检查不会更容易,同时也会向用户返回一条特定的错误消息,确切地说是什么错了,PW是否应该验证?将字符串包装在
new RegExp中(…这里是字符串…)
或在此处使用
/regex/
符号。在JavaScript中,您不必在字符串内部使用
\\d
吗?我认为只有在使用
/…/
stype regexp时,单转义才有效。为什么密码最多只能使用八个字符?@Jack客户端要求。与通常我所做的非常不同,可以添加所有特殊符号:`、!、@、#、$,%“,^,&,*,-,,,,,”@Dhwani当然,只需在集合中添加任何缺少的字符,但请确保连字符是第一个或最后一个字符。@Jack好吧,如果我对你的答案投了赞成票,那么肯定是好的;)(我有)