我需要使用 JavaScript 在以下条件下进行密码验证。我的条件:
- 至少 0-9 中的一位数字
- 至少一个小写字符
- 至少一个大写字符
- 必须包含至少一个特殊字符
- 长度至少 8 个字符,最多 20 个字符
- 注意:空格键也被视为特殊字符。
我试过了
(?=^.{6,10}$)(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()_+}{":;'?/>.<,' '])(?!.*\s).*$
但是这不起作用。还有其他想法吗?
最佳答案
基本解决方案
处理一组验证规则的最佳方法(在我看来)是为每个规则定义一个正则表达式,然后迭代这些规则并检查它们是否成功。如果任何规则失败,则整个验证失败。
类似这样的事情:
var rules = [
/[0-9]/,//at least one digit from 0-9, could also use \d
/[a-z]/,//at least one lowercase
/[A-Z]/,//at least one uppercase
/[!%&*\s]/,//special characters, add more as needed. note that \s checks for whitespace
/^.{8,20}$///length between 8-20
];
var input = "Something1!";
//validate
var pass = true;
for(var i = 0; i < rules.length; i++){
var rule = rules[i];
if(!rule.test(input)){
pass = false;
break;
}
}
<小时/>
高级解决方案
您可以进一步扩展此解决方案,以允许将专用错误消息与每个规则关联。您将拥有一个对象数组,而不是一个正则表达式数组 - 每个对象都包含正则表达式规则和错误消息。
例如:
var rules = [{
exp: /[0-9]/,
msg: 'must contain at least one digit'
}, {
exp: /[a-z]/,
msg: 'must contain at least one lowercase'
}, {
exp: /[A-Z]/,
msg: 'must contain at least one uppercase'
}, {
exp: /[!%&*\s]/,
msg: 'must contain at least one special move'
}, {
exp: /^.{8,20}$/,
msg: 'must be 8-20 characters long'
}];
var input = "Something1!";
var pass = true;
for (var i = 0; i < rules.length; i++) {
var rule = rules[i];
if (!rule.exp.test(input)) {
pass = false;
alert("Error: " + rule.msg);//alert the error message
break;
}
}
关于使用空格字符进行 JavaScript 密码验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21404330/