密码校验2(超级变态的密码)

先上图,因为密码的规则比较杂乱,请教了同事后发现也没有什么好的统一校验处理方法,只能一个个if去判断,看着比较💩
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
密码校验工具集:

/**
* 密码校验
*/
passwordRules(str) {
	// psdStrRules判断密码必须包含大小写字母数字特殊字符
	// psdRepRules判断是否连续字符出现2次以上或者一共出现4次以上
	let psdStrRules = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[~!@#$%^&*()_ +^\-={}:";'<>?,.\/])[\da-zA-Z~!@#$%^&*()_ +^\-={}:";'<>?,.\/]{8,32}$/;
	// let psdRepRules = /^(.)\1{2}|(.)(.*\2){3}$/;
	let psdRepRules = /(.)\1{2}/
	if (psdRepRules.test(str) || !psdStrRules.test(str)) {
	    return false;
	} else {
	    return true
	}
},

// 同一字符不可连续3次或不连续4次以上
passwordRules1(str) {
    let obj = {}
    for (let i = 0; i <= str.length; i++) {
        let key = str[i];
        if (obj[key]) {
            obj[key]++;
        } else {
            obj[key] = 1
        }
    }
    return Object.values(obj).some(item => item > 4);
},


/**
* 校验新旧密码最少差别字符策略
*/
checkMinNewOldPwdDiffNum(newVal = '', oldVal = '', minNewOldPwdDiffNum = 0) {
   let isMinNewOldPwdDiffNumOK = false
   let nDiffNum = 0
   //取新旧密码的个数差异,如果个数差异大于最少差别字符数,直接校验通过
   nDiffNum = Math.abs(newVal.length - oldVal.length)
   if (nDiffNum < minNewOldPwdDiffNum) {
     let newPwdCur = 0
     let oldPwdCur = 0
     //遍历两个字符串,如果对应位置不一样的字符数加上个数差异大于nValue,则直接返回成功
     while (newPwdCur !== newVal.length && oldPwdCur !== oldVal.length) {
       if (newVal.charAt(newPwdCur) !== oldVal.charAt(oldPwdCur)) {
         nDiffNum++
         if (nDiffNum >= minNewOldPwdDiffNum) {
           isMinNewOldPwdDiffNumOK = true
           break
         }
       }
       newPwdCur++
       oldPwdCur++
     }
   } else {
     isMinNewOldPwdDiffNumOK = true
   }
   return isMinNewOldPwdDiffNumOK
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值