js语言实现信息脱敏

1.手机号显示前三后四位

// 方法1:正则
    function getTel1(tel){
      const reg = /^(\d{3})\d{4}(\d{4})$/ 
      return tel.replace(reg, "$1****$2")
    }
    // 方法2:截取长度
    function getTel2(tel){
      return tel.substr(0, 3)+"****"+tel.substr(tel.length-4)
    }
    const tel = "17326453333" 
    console.log(getTel1(tel)) // 173****3333
    console.log(getTel2(tel)) // 173****3333

2.姓名脱敏

function getName(name) {
      let newStr
      if (name.length === 2) {
          newStr = name.substr(0, 1) + '*'
      } else if (name.length > 2) {
          let char = ''
          for (let i = 0, len = name.length - 2; i < len; i++) {
              char += '*'
          }
          newStr = name.substr(0, 1) + char + name.substr(-1, 1)
      } else {
          newStr = name
      }
      return newStr
    }
    console.log(getName('张')) // 张
    console.log(getName('张一')) // 张*
    console.log(getName('张一一')) // 张*一
    console.log(getName('张一一一')) // 张**一

3.总结一下截取字符串的三种方法slice() / substr() / substring()

1.substr()
  • 参数1:起始下标:如果是负数,则该参数规定的是从字符串的尾部开始算起。也就是说,-1 指字符串的最后一个字符,-2 指倒数第二个字符,以此类推
  • 参数2:截取的长度(截取几个字符):非负的整数,如果没有此参数,则表示截取到原字符串结尾的字符
  • 注意:如果参数2写了负数,但截取长度不可能为负,所以结果为空字符串
var str = 'abcdefghijk'
console.log(str.substr(2,4)) // cdef
console.log(str.substr(4)) // efghijk
console.log(str.substr(-5,2)) // gh 
console.log(str.substr(-5,-3)) // ''
2.substring()
  • 参数1:起始下标:如果是负数,会将这个负数自动转化为0
  • 参数2:结束下标+1:如果是负数,会将这个负数自动转化为0;如果没有此参数,则表示截取到原字符串结尾的字符
  • 注意:
    参数1和参数2都为负数时:都转化为0,所以结果为空字符串;
    参数1大于参数2时:会自动将参数1和参数2交换;
    参数1为正数,参数2为负数时:将参数2转化为0,此时参数1大于参数2,再自动交换,也就是从0开始截取到参数1的位置。
var str = 'abcdefghijk'
console.log(str.substring(4)) // efghijk
console.log(str.substring(2,4)) // cd 
console.log(str.substring(-5,2)) // ab  -- (0,2)
console.log(str.substring(4,1)) // bcd  -- (1,4)
console.log(str.substring(4,-1)) // abcd -- (4,0) -- (0,4)
console.log(str.substring(-5,-3)) // ''  -- (0,0)
3. slice()
  • 参数1:起始下标:如果是负数,则该参数规定的是从字符串的尾部开始算起。也就是说,-1 指字符串的最后一个字符,-2 指倒数第二个字符,以此类推
  • 参数2:结束下标+1:如果没有此参数,则表示截取到原字符串结尾的字符。如果该参数是负数,规定的是从字符串的尾部开始算起的位置
  • 注意:
    参数1大于参数2时:不会自动交换,结果就是空字符串;
    参数1和参数2有负值时:都是从结束位置开始算起,只要最终:参数1对应的索引在参数2的左边,就能正常截取;参数1对应的索引在参数2的右边,结果就是空字符串;参数1对应的索引和参数2对应的索引相等,结果就是空字符串。
var str = 'abcdefghijk'
console.log(str.slice(2,4)) // cd 
console.log(str.slice(0,-5)) // abcdef
console.log(str.slice(-5,-3)) // gh