/*
* 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

小野
622 声望18 粉丝

日常不定期更新