Javascript 密码正则表达式-不工作

Javascript 密码正则表达式-不工作,javascript,regex,Javascript,Regex,我需要一个正则表达式作为密码,该密码必须包含: 至少一个大写字符 至少一个小写字符 至少一位数字 下列字符中至少有一个符号字符:`~!@$%^&*()_-+={}[]|:;“,.?/和空格字符 最小长度应为6厘米 到目前为止,我得出了以下结论: ^\S*(?=\S{6,})(?=.*[A-Z])(?=.*[a-z])(?=.*\d)([`\~\!@#\$%\^&\*\(\)_\-\+={}\[\]\|:;"'<>,\.\?\/ ])\S*$ ^\S*(?=\S{6,})

我需要一个正则表达式作为密码,该密码必须包含:

  • 至少一个大写字符
  • 至少一个小写字符
  • 至少一位数字
  • 下列字符中至少有一个符号字符:`~!@$%^&*()_-+={}[]|:;“,.?/和空格字符
  • 最小长度应为6厘米
到目前为止,我得出了以下结论:

^\S*(?=\S{6,})(?=.*[A-Z])(?=.*[a-z])(?=.*\d)([`\~\!@#\$%\^&\*\(\)_\-\+={}\[\]\|:;"'<>,\.\?\/ ])\S*$
^\S*(?=\S{6,})(?=.[A-Z])(?=.[A-Z])(?=..[A-Z])(?=.\d)([`~\!@\\$%\^&*\(\)\u\-\+={}\[\]\\\\\:;“,\.\?\/])\ S*$
但由于某种原因,它没有像我希望的那样工作。我在这些事情上总是遇到麻烦,所以任何帮助都将不胜感激。
谢谢。

这不能用单个regexp来表达。正如您标记的“javascript”,下面是我在JS中的实现方式

function validatePassword(password) {
  return password.length >= 6 &&
    /[A-Z]/.exec(password) &&
    /[a-z]/.exec(password) &&
    /[0-9]/.exec(password) &&
    /[ `~!@#$%^&*()_-+={}\[\]|:;"'<>,.?\/]/.exec(password);
}
函数验证密码(密码){
返回密码。长度>=6&&
/[A-Z]/.exec(密码)&&
/[a-z]/.exec(密码)&&
/[0-9]/.exec(密码)&&
/[`~!@$%^&*()_-+={}\[\]\\:;“,.?\/]/.exec(密码);
}

这不是一个很好的正则表达式。正如您标记的“javascript”,下面是我在JS中的实现方法

function validatePassword(password) {
  return password.length >= 6 &&
    /[A-Z]/.exec(password) &&
    /[a-z]/.exec(password) &&
    /[0-9]/.exec(password) &&
    /[ `~!@#$%^&*()_-+={}\[\]|:;"'<>,.?\/]/.exec(password);
}
函数验证密码(密码){
返回密码。长度>=6&&
/[A-Z]/.exec(密码)&&
/[a-z]/.exec(密码)&&
/[0-9]/.exec(密码)&&
/[`~!@$%^&*()_-+={}\[\]\\:;“,.?\/]/.exec(密码);
}
这应该可以:

/(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[`\~\!@#\$%\^&\*\(\)_\-\+={}\[\]\|:;"'<>,\.\?\/ ]).{6,}/;
/(?=.*\d)(?=.[a-z])(?=.[a-z])(?=.[`\\!@\$%\^&*\(\)\u\-\+={}\[\]\\\\\:;“,\.\?\/]){6,};
关于我是如何做到这一点的完整解释,请参见

这应该可以:

/(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[`\~\!@#\$%\^&\*\(\)_\-\+={}\[\]\|:;"'<>,\.\?\/ ]).{6,}/;
/(?=.*\d)(?=.[a-z])(?=.[a-z])(?=.[`\\!@\$%\^&*\(\)\u\-\+={}\[\]\\\\\:;“,\.\?\/]){6,};

关于我是如何做到这一点的完整解释在

上,我认为使用一个正则表达式的唯一方法是一个巨大的怪物。。。您必须按每种可能的顺序检查所有组,即使这样,长度检查也很难做到。我尝试了一下,得到了以下错误:未捕获的语法错误:无效的正则表达式:/[`~!@$%^&*()u-+={}[].:;“”,.?\/]/:字符类中的范围无序好的,完成了。我必须转义一些字符才能使其工作。^$*+?()[]{\|--这些。谢谢。是的,很抱歉@Kapn0batai没有太多地检查regexp。我认为使用一个regex进行检查的唯一方法是一个巨大的怪物……你必须按每个可能的顺序检查所有组,即使这样长度检查也很难实现。我尝试了一下,得到了以下错误:Uncaught syntaxer:无效的正则表达式:/[`~!@$%^&*(),.?\/]/:字符类中的范围无序好了,完成了。我必须转义一些字符才能使其工作。^$*+?()[]{\|--这些。谢谢。是的,很抱歉@Kapn0batai,没有太多地检查regexp。嗯,看,这是一个有趣的解决方案,但我认为它非常昂贵,因为有很多回溯。@MofX唯一的方法是测试:)我刚刚意识到,你用符号过度扩展了组。唯一需要做的事情是被转义是]和/。如果转义的符号没有其他意义,我不确定regexp实现的行为。嗯,这是一个有趣的解决方案,但我认为它非常昂贵,因为有很多回溯。@MofX唯一的方法是测试它:)我刚刚意识到,你用符号过度转义了组。仅需要转义的是]和/。如果转义的符号没有其他意义,我不确定regexp实现的行为。