/**
* 规则:
* 1、长度需8-16位
* 2、不能包含的自定义名称['XX', 'XX', 'XX', 'XX']
* 3、不能包含连续3位及以上相同字母或数字
* 4、不能包含3个及以上字典连续字符
* 5、不能包含3个及以上键盘连续字符
* 6、数字、小写字母、大写字母、特殊字符,至少包含三种
*/
// 校验密码
export function checkPassword(val) {
let flag = false
switch (false) {
case validateFormat(val):
console.error("密码长度需要在8-16位,数字、小写字母、大写字母、特殊字符,至少包含三种");
break;
case validateCompanyName(val):
console.error("不能包含公司名(XX、XX、XX、XX)");
break;
case validateChar(val):
console.error("不能包含3个及以上键盘连续字符或连续3位及以上相同字母或数字");
break;
default:
console.log("校验通过");
flag = true
}
return flag
}
// 长度需8-16位,数字、小写字母、大写字母、特殊字符,至少包含三种
function validateFormat(val) {
const passwrodReg = /((^(?=.*[a-z])(?=.*[A-Z])(?=.*\W)[\da-zA-Z\W]{8,16}$)|(^(?=.*\d)(?=.*[A-Z])(?=.*\W)[\da-zA-Z\W]{8,16}$)|(^(?=.*\d)(?=.*[a-z])(?=.*\W)[\da-zA-Z\W]{8,16}$)|(^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[\da-zA-Z\W]{8,16}$))/;
return passwrodReg.test(val);
}
// 不能包含公司名
function validateCompanyName(val) {
const companyName = ["jinmao", "jmwy", "sinochem", "sino"];
return companyName.every(item => {
return !val.toLowerCase().includes(item);
});
}
/**
* 键盘字符表(小写)
* 非shift键盘字符表
*/
const charTable1 = [
["`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=", ""],
["", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "[", "]", "\\"],
["", "a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "'", "", ""],
["", "z", "x", "c", "v", "b", "n", "m", ",", ".", "/", "", "", ""]
];
/**
* shift键盘的字符表
*/
const charTable2 = [
["~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "+", ""],
["", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "{", "}", "|"],
["", "a", "s", "d", "f", "g", "h", "j", "k", "l", ":", '"', "", ""],
["", "z", "x", "c", "v", "b", "n", "m", "<", ">", "?", "", "", ""]
];
// 所有键盘组合值
let charAll = []
function getCharAll() {
charAll = []
// 横向所有的值(正序和反序)-
charTable1.concat(charTable2).forEach((item, index) => {
charAll.push(item.join(''), Object.assign([], item).reverse().join(''))
})
// 反斜杠纵向所有的值(正序和反序)\
for (let i = 0; i < charTable1[0].length; i++) {
let sb1 = []
let sb2 = []
charTable1.forEach(item => {
sb1.push(item[i])
})
charTable2.forEach(item => {
sb2.push(item[i])
})
// 去除长度小于3的值
sb1.join('').length < 3 || charAll.push(sb1.join(''), Object.assign([], sb1).reverse().join(''))
sb1.join('').length < 3 || charAll.push(sb2.join(''), Object.assign([], sb2).reverse().join(''))
}
// 正斜杠纵向所有的值(正序和反序)/
for (let i = 0; i < charTable1[0].length; i++) {
let sb1 = []
let sb2 = []
charTable1.forEach((item, index) => {
i - index < 0 || sb1.push(item[i - index])
})
charTable2.forEach((item, index) => {
i - index < 0 || sb2.push(item[i - index])
})
// 去除长度小于3的值
sb1.join('').length < 3 || charAll.push(sb1.join(''), Object.assign([], sb1).reverse().join(''))
sb1.join('').length < 3 || charAll.push(sb2.join(''), Object.assign([], sb2).reverse().join(''))
}
charAll.push('abcdefghijklmnopqrstuvwxyz')
return charAll
}
// 校验键盘连续性和连续重复
function validateChar(val) {
getCharAll();
let password = val.toLowerCase();
// 密码3位比对
for (let i = 0; i < password.length - 2; i++) {
let n1 = password[i];
let n2 = password[i + 1];
let n3 = password[i + 2];
// 判断重复字符
if (n1 === n2 && n1 === n3) {
return false;
// 判断键盘连续字符
} else if (charAll.some(item => {
return item.includes(n1 + n2 + n3);
})) {
return false
}
}
}
密码规则校验(不能包含3个及以上键盘或字典连续字符、数字、小写字母、大写字母、特殊字符,至少包含三种)
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 密码强度正则表达式 – 必须包含大写字母,小写字母和数字,至少8个字符等 发表于 2017年09月8日 by 天涯...
- 例如: 字符串China23beiJing 经过程序转换为cHINA23BEIjING /* 函数,将大写字母变小...