/*
* 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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。