最近遇到一个密码需求,需要支持大写字母、小写字母、数字、特殊字符至少三种以上,长度固定在8-20位。嗯,这个小问题让我思考了很久。那就简单记录一下吧
function checkPassword(str) {
const cur = str.trim();
const num = cur.length;
if (num < 8 || num > 20) {
return false;
}
const t = /[a-z]/.test(cur);
const o = /[A-Z]/.test(cur)
const s = /\d/.test(cur)
const i = /[!@#$%^&*()_+\-={}|\\:";'<>?,./~]/.test(cur)
const a = [t, o, s, i].filter(Boolean).length;
return a >= 3
}
也可以直接使用正则
const passwordReg = /^(?![a-zA-Z]+$)(?![0-9]+$)(?![\W_]+$)(?![a-z0-9]+$)(?![A-Z0-9]+$)(?![a-z\W_]+$)(?![A-Z\W_]+$)(?![0-9\W_]+$).{8,20}$/;
补充一个将手机号格式化位344格式的工具函数
function splitMobile(tel) {
const str = tel.replace(/\s/g, "");
const len = str.length;
if (len >= 4 && len <= 7) return str.replace(/^(.{3})/g, '$1 ');
if (len >= 8 && len <= 11) return str.replace(/^(.{3})(.{4})/g, '$1 $2 ');
if (len > 11) return str.slice(0, 11).replace(/^(.{3})(.{4})/g, '$1 $2 ');
return str;
}