Javascript 如何使用正确的正则表达式修复密码验证条件?
我正在尝试修复无法按预期工作的逻辑条件 例如,“密码中有两位数字”条件在Javascript 如何使用正确的正则表达式修复密码验证条件?,javascript,html,regex,Javascript,Html,Regex,我正在尝试修复无法按预期工作的逻辑条件 例如,“密码中有两位数字”条件在1test2上失败,即使其中有两位数字 我的规则是: 密码必须至少有2位数字 密码必须至少包含6个字母 密码必须至少有一个特殊字符 密码长度必须至少为8个字符 功能检查密码(pwd){ 常量特殊字符=“[~\!@\$%\^&*\(\)\+{}\”:;,“\[\]” 如果(/[0-9]{2,}/.test(pwd)){//至少2位 返回true; } 如果(/[a-zA-Z]{6,}/.test(pwd)){//至少6个
1test2
上失败,即使其中有两位数字
我的规则是:
- 密码必须至少有2位数字
- 密码必须至少包含6个字母
- 密码必须至少有一个特殊字符
- 密码长度必须至少为8个字符
功能检查密码(pwd){
常量特殊字符=“[~\!@\$%\^&*\(\)\+{}\”:;,“\[\]”
如果(/[0-9]{2,}/.test(pwd)){//至少2位
返回true;
}
如果(/[a-zA-Z]{6,}/.test(pwd)){//至少6个字母
返回true;
}
if(新RegExp(特殊字符).test(pwd)){//至少1个特殊字符
返回true;
}
如果(pwd长度<8){
返回true;
}
}
您可以使用
const regex = /^(?=.{8})(?=(?:\D*\d){2})(?=(?:[^a-zA-Z]*[a-zA-Z]){6})(?=[^~!@#$%^&*()_+{}":;,'[\]]*[~!@#$%^&*()_+{}":;,'[\]])/
请参阅(该模式稍作修改,以避免在对单个多行字符串执行演示时匹配换行符)
详细信息
-字符串的开头^
-密码必须至少有两位数字(?=(?:\D*\D){2})
-密码必须至少包含6个字母(?=(?:[^a-zA-Z]*[a-zA-Z]){6}
-密码必须至少有一个特殊字符(?=[^~!@$%^&*(),'[\]*[~!@$%^&*(),'[\]])
-密码长度必须至少为8个字符(?=.{8})
const regex=new RegExp(“^”+//字符串的开头
“(?=.{8})”+//长度必须至少为8个字符
String.raw`(?=(?:\D*\D){2}`+//必须至少有两位数字
“(?=(?:[^a-zA-Z]*[a-zA-Z]){6}”+//必须至少有6个字母
String.raw`(?=[^~!@$%^&*()[u+{}]:,'[\]*[~!@$%^&*()[u+{}]:,'[\]])必须至少有6个字母
);
console.log(regex);
您可以使用
const regex = /^(?=.{8})(?=(?:\D*\d){2})(?=(?:[^a-zA-Z]*[a-zA-Z]){6})(?=[^~!@#$%^&*()_+{}":;,'[\]]*[~!@#$%^&*()_+{}":;,'[\]])/
请参阅(该模式稍作修改,以避免在对单个多行字符串执行演示时匹配换行符)
详细信息
-字符串的开头^
-密码必须至少有两位数字(?=(?:\D*\D){2})
-密码必须至少包含6个字母(?=(?:[^a-zA-Z]*[a-zA-Z]){6}
-密码必须至少有一个特殊字符(?=[^~!@$%^&*(),'[\]*[~!@$%^&*(),'[\]])
-密码长度必须至少为8个字符(?=.{8})
const regex=new RegExp(“^”+//字符串的开头
“(?=.{8})”+//长度必须至少为8个字符
String.raw`(?=(?:\D*\D){2}`+//必须至少有两位数字
“(?=(?:[^a-zA-Z]*[a-zA-Z]){6}”+//必须至少有6个字母
String.raw`(?=[^~!@$%^&*()[u+{}]:,'[\]*[~!@$%^&*()[u+{}]:,'[\]])必须至少有6个字母
);
console.log(regex)
我没有对您的Regexp做任何更改-仅对其周围的逻辑进行更改。您可能希望从变量valid
开始,如果不满足这些条件,您可以设置valid=false
。在函数末尾,您希望返回valid
,它将是true
或function checkPassword(pwd){
let valid = true;
const special_characters = "[~\!@#\$%\^&\*\(\)_\+{}\":;,'\[\]]"
if (!/[0-9]{2,}/.test(pwd)){ // at least 2 digits
valid = false;
}
if (!/[a-zA-Z]{6,}/.test(pwd)){ // at least 6 letters
valid = false;
}
if (!new RegExp(special_characters).test(pwd)){ // at least 1 special character
valid = false;
}
if (!pwd.length < 8){
valid = false;
}
return valid;
}
功能检查密码(pwd){
让valid=true;
常量特殊字符=“[~\!@\$%\^&*\(\)\+{}\”:;,“\[\]”
如果(!/[0-9]{2,}/.test(pwd)){//至少2位
有效=错误;
}
如果(!/[a-zA-Z]{6,}/.test(pwd)){//至少6个字母
有效=错误;
}
如果(!new RegExp(特殊字符).test(pwd)){//至少1个特殊字符
有效=错误;
}
如果(!pwd.长度<8){
有效=错误;
}
返回有效;
}
旁注:复杂密码验证可能对用户有限制。鼓励用户使用更长的密码(或密码短语)要比使用几个特殊字符的更短密码安全得多。我没有对您的Regexp进行任何更改,只是对其周围的逻辑进行了更改。您可能希望从变量
valid
开始,如果不满足这些条件,可以设置valid=false
。在函数结束时,您希望返回valid
,该值为true
或false
的布尔值,具体取决于密码是否通过了所有测试
function checkPassword(pwd){
let valid = true;
const special_characters = "[~\!@#\$%\^&\*\(\)_\+{}\":;,'\[\]]"
if (!/[0-9]{2,}/.test(pwd)){ // at least 2 digits
valid = false;
}
if (!/[a-zA-Z]{6,}/.test(pwd)){ // at least 6 letters
valid = false;
}
if (!new RegExp(special_characters).test(pwd)){ // at least 1 special character
valid = false;
}
if (!pwd.length < 8){
valid = false;
}
return valid;
}
功能检查密码(pwd){
让valid=true;
常量特殊字符=“[~\!@\$%\^&*\(\)\+{}\”:;,“\[\]”
如果(!/[0-9]{2,}/.test(pwd)){//至少2位
有效=错误;
}
如果(!/[a-zA-Z]{6,}/.test(pwd)){//至少6个字母
有效=错误;
}
如果(!new RegExp(特殊字符).test(pwd)){//至少1个特殊字符
有效=错误;
}
如果(!pwd.长度<8){
有效=错误;
}
返回有效;
}
旁注:复杂的密码验证可能会对用户造成限制。鼓励用户使用更长的密码(或密码短语)比使用带有几个特殊字符的较短密码要安全得多。试试这个。它似乎更易于阅读和维护:
功能检查密码(pwd){
常量特殊字符=/[%~!@$\^&*(\+{}):,“\[\]/;
返回pwd。替换(/[^0-9]/g',)。长度>=2
&&pwd.替换(/[^a-zA-Z]/g',)。长度>=6
&&特殊字符测试(pwd)
&&pwd.length>=8
}
日志(检查密码('FF%lkf%jd%fk12')代码>试试这个。它似乎更易于阅读和维护:
功能检查密码(pwd){
常量特殊字符=/[%~!@$\^&*(\+{}):,“\[\]/;
返回pwd。替换(/[^0-9]/g',)。长度>=2
&&pwd.替换(/[^a-zA-Z]/g',)。长度>=6
&&特殊字符测试(pwd)
&&pwd.length>=8
}
log(checkPassword('FF%lkf%jd%fk12'));
该代码的逻辑错误。