vue 复杂密码校验
2023-12-24 本文已影响0人
flyinskybiu
针对复杂密码
checkPassword(rule, value, callback) {
this.level = [];
if (!value) {
return callback("密码不能为空");
}
if (value.length < 8) {
return callback("密码不少于8位");
}
if (value.length > 20) {
return callback("密码不大于20位");
}
// 校验是数字
const regex1 = /^\d+$/;
// 校验字母
const regex2 = /^[A-Za-z]+$/;
// 校验符号
const regex3 = /^[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘',。、]+$/;
const isLowerCase = /^.*[a-z]+.*/;
const isUpperCase = /^.*[A-Z]+.*/;
const regEx = /^.*[^a-zA-Z0-9]+.*/;
var num = 0;
if (regex1.test(value)) {
num = num + 1;
}
if (isLowerCase.test(value)) {
num = num + 1;
}
if (isUpperCase.test(value)) {
num = num + 1;
}
if (regEx.test(value)) {
num = num + 1;
}
var numberSequence = false;
for (var i = 0; i < value.length - 3; i++) {
if (!regex1.test(value.substring(i, i + 1)) || !regex1.test(value.substring(i + 1, i + 2) + "") || !regex1.test(value.substring(i + 2, i + 3) + "") || !regex1.test(value.substring(i + 3, i + 4) + "")) {
continue;
}
var no1 = Number(value.substring(i, i + 1));
var no2 = Number(value.substring(i + 1, i + 2));
var no3 = Number(value.substring(i + 2, i + 3));
var no4 = Number(value.substring(i + 3, i + 4));
if (no1 + 1 == no2 && no2 + 1 == no3 && no3 + 1 == no4) {
numberSequence = true;
}
if (no2 + 1 == no1 && no3 + 1 == no2 && no4 + 1 == no3) {
numberSequence = true;
}
}
if (numberSequence) {
// $.messager.alert("错误","密码中不能包含有连续四位及以上顺序(或逆序)数字(如:密码中不能包含1234或3210等)。");
// falg = '密码中不能包含有连续四位及以上顺序(或逆序)数字(如:密码中不能包含1234或3210等';
return callback('密码中不能包含有连续四位及以上顺序(或逆序)数字(如:密码中不能包含1234或3210等');;
}
else if (num <= 2) {
//$.messager.alert("错误","密码复杂度不足,\n(1)大写字母\n(2)小写字母\n(3)数字\n(4)特殊符号\n密码至少需包含上述情形中的三种.");
// flag = '密码复杂度不足,\n(1)大写字母\n(2)小写字母\n(3)数字\n(4)特殊符号\n密码至少需包含上述情形中的三种';
return callback('密码复杂度不足,\n(1)大写字母\n(2)小写字母\n(3)数字\n(4)特殊符号\n密码至少需包含上述情形中的三种');
}
else if (regex1.test(value)) {
this.level.push("low");
return callback("设置8至20位包含大小写字母、数字、特殊符号的密码");
} else if (regex2.test(value)) {
this.level.push("low");
return callback("设置8至20位包含大小写字母、数字、特殊符号的密码");
} else if (regex3.test(value)) {
this.level.push("low");
return callback("设置8至20位包含大小写字母、数字、特殊符号的密码");
} else if (/^[A-Za-z\d]+$/.test(value)) {
this.level.push("low");
this.level.push("middle");
return callback("设置8至20位包含大小写字母、数字、特殊符号的密码");
} else if (
/^[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘',。、\d]+$/.test(value)
) {
this.level.push("low");
this.level.push("middle");
return callback("设置8至20位包含大小写字母、数字、特殊符号的密码");
} else if (
/^[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘',。、A-Za-z]+$/.test(
value
)
) {
this.level.push("low");
this.level.push("middle");
return callback("设置8至20位包含大小写字母、数字、特殊符号的密码");
} else if (
/^[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘',。、A-Za-z\d]+$/.test(
value
)
) {
this.level.push("low");
this.level.push("middle");
this.level.push("high");
}
return callback();
},
使用方法
rules: {
password: [
{ required: true, validator: this.checkPassword, trigger: "blur" },
] ,
},