8:密码长度至少8位;
3:使用数字、大写字母、小写字母、特殊符号至少3种组合;
1:至少一个月更换一次。
程序上验证密码至少8位长并且包含大写字母、小写字母、数字、特殊字符中的至少三种类型:
1、正则表达式
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d[^@$!%*?&]*.[@$!%*?&].*|[^a-z]*[a-z].*[^A-Z\d]*[A-Z].*[^a-z\d]*[\d].*|[^A-Z]*[A-Z].*[^a-z\d]*[\d].*[^a-z]*[a-z].*)|(?=.*[a-z])(?=.*[A-Z])(?=.*[@$!%*?&])[^d]*[\d].*|(?=.*[a-z])(?=.*\d)(?=.*[@$!%*?&])[^A-Z]*[A-Z].*|(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[^a-z]*[a-z].*[A-Za-z\d@$!%*?&]{7,}$由于正则表达式本身不支持直接的“至少三种类型”的逻辑判断,需要通过多个预查来模拟这种逻辑,并使用了嵌套的正则表达式和逻辑或来确保至少三种类型的字符。该表达式非常复杂且难以维护,而且可能不是最优解。更好的做法可能是使用编程语言中的正则表达式库结合简单的逻辑判断来处理这种情况。
2、逻辑判断
const validatePassword = (value) => {
const hasLowercase = /[a-z]/.test(value)
const hasUppercase = /[A-Z]/.test(value)
const hasDigit = /\d/.test(value)
const hasSpecialChar = /[^a-zA-Z0-9 ]/.test(value)
// 计算包含的字符类型数量
let typeCount = 0
if (hasLowercase) typeCount++
if (hasUppercase) typeCount++
if (hasDigit) typeCount++
if (hasSpecialChar) typeCount++
if (value.length < 8 || typeCount < 3) {
return false
} else {
return true
}
}