前端脱敏展示姓名、手机号、邮箱

姓名脱敏

姓名只显示第一个字,如“张*”、“王**”

/**
 * 姓名脱敏:只显示第一个字,其余用 * 代替
 * @param {String} name 姓名字符串
 * @return {String} 脱敏后的姓名
 */
function maskName(name) {
  if (!name || typeof name !== 'string') {
    return ''
  }
  // 如果姓名长度为0直接返回
  if (name.length === 0) return ''
  // 只保留第一个字符,其余替换成 *
  return name.charAt(0) + '*'.repeat(name.length - 1)
}

手机号脱敏

手机号展示前3位和后4位,中间用 * 替代,如“139****1234”

/**
 * 手机号脱敏:展示前3位和后4位,中间用 * 替代
 * @param {String} phone 手机号码字符串
 * @return {String} 脱敏后的手机号
 */
function maskPhone(phone) {
  if (!phone || typeof phone !== 'string') {
    return ''
  }
  // 正则匹配:保留前3位和后4位,中间用 * 替代
  return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
}

邮箱脱敏

邮箱只显示第一个字符、@及@后面的内容,中间用 * 替代,如“1****@163.com”

/**
 * 邮箱脱敏:只显示第一个字符、@及@后面的内容,中间用 * 替代
 * @param {String} email 邮箱地址
 * @return {String} 脱敏后的邮箱
 */
function maskEmail(email) {
  if (!email || typeof email !== 'string') {
    return ''
  }

  // 正则解释:
  // ^(.)(.*?)(@.*)$ 分为三组:
  //   1. 第一个字符 (.)
  //   2. 中间部分 (.*?) 非贪婪匹配
  //   3. @及后面的内容 (@.*)
  // 替换为:$1 + * * * ... + $3
  return email.replace(/^(.)(.*?)(@.*)$/, function(match, firstChar, middle, atPart) {
    // 如果中间部分为空(如 [email protected]),则不脱敏
    if (middle.length === 0) {
      return match
    }
    // 用 * 填充中间部分
    const maskedMiddle = '*'.repeat(middle.length)
    return firstChar + maskedMiddle + atPart
  })
}

你可能感兴趣的:(前端)