/*
* description 字符串脱敏解决 substr repeat Math.min(max, Math.max(0, repeatNum))
* param {Number} beginLen 字符串头显示位数
* param {Number} endLen 字符串尾显示位数
* param {Number} max 默认值 999 * 显示最大数目
* */
function getStr (beginLen, endLen, max=999) {
// 这里用了闭包,闭包用完后需手动开释内存
return function (str) {const firstStr = str.substr(0, beginLen)
const lastStr = endLen == 0 ? '' : str.substr(endLen)
let repeatNum = Math.max(0, str.length - (beginLen + Math.abs(endLen)))
repeatNum = Math.min(max, repeatNum)
const middleStr = '*'.repeat(repeatNum)
return firstStr + middleStr + lastStr
}
}
/*
昵称脱敏规定
1 个字符:显示
2 个字符:首字符 +*(王雨 显示 王 *)3 个字符:首字符 +*+ 开端字符(王哈呀 显示 王 * 呀)4 个字符:首 2 字符 +**+ 开端字符(yhzj 显示 yh*j)5 个字符:首 2 字符 +*+ 开端 2 字符(王语嫣要得 显示 王语 * 要得)6 个字符:首 2 字符 +**+ 开端 2 字符(天天开心小野 显示 天天 ** 小野)大于 6 个字符:首 2 字符 +***+ 开端 2 字符(天天开心呀小野 显示 天天 *** 小野)*/
let getName = (str) => {
let getResult = null
switch (str.length) {
case 1:
case 2:
getResult = getStr(1, 0)
break
case 3:
getResult = getStr(1, -1)
break
case 4:
getResult = getStr(2, -1)
break
default:
getResult = getStr(2, -2, 3)
break
}
const result = getResult(str)
getResult = null // 闭包 - 需手动开释
return result
}
console.log(getName('王'))
console.log(getName('王语'))
console.log(getName('王语语'))
console.log(getName('王嘻嘻嘻'))
console.log(getName('王嘻嘻嘻呀'))
console.log(getName('天天开心小野'))
console.log(getName('天天开心小野人'))
console.log(getName('天天开心小野人呀'))
console.log(getName('天天开心小野人呀天天开心小野人呀'))
let getPhone = getStr(3, -4)
let getIdCard = getStr(6, -4)
let getBankCard = getStr(6, -4)
console.log(getPhone(`18888888888`))
console.log(getIdCard(`500106197003039999`))
console.log(getBankCard(`6227000000000000001`))
// 闭包 - 需手动开释
getPhone = null
getIdCard = null
getBankCard = null