当前位置:首页 > VUE

vue实现姓名脱敏

2026-02-18 08:14:00VUE

Vue 实现姓名脱敏的方法

在 Vue 中实现姓名脱敏可以通过多种方式,以下是几种常见的方法:

使用计算属性

通过计算属性对姓名进行处理,保留首尾字符,中间用星号替代:

computed: {
  desensitizedName() {
    if (this.name && this.name.length > 1) {
      const firstChar = this.name.charAt(0)
      const lastChar = this.name.charAt(this.name.length - 1)
      return `${firstChar}${'*'.repeat(this.name.length - 2)}${lastChar}`
    }
    return this.name || ''
  }
}

自定义过滤器

创建一个全局过滤器来处理姓名脱敏:

Vue.filter('desensitize', function(value) {
  if (!value) return ''
  if (value.length <= 2) return value.charAt(0) + '*'
  return value.charAt(0) + '*'.repeat(value.length - 2) + value.slice(-1)
})

使用方式:

<p>{{ name | desensitize }}</p>

使用指令方式

创建一个自定义指令来实现脱敏效果:

Vue.directive('desensitize', {
  bind(el, binding) {
    const value = binding.value
    if (value && value.length > 1) {
      const firstChar = value.charAt(0)
      const lastChar = value.charAt(value.length - 1)
      el.textContent = `${firstChar}${'*'.repeat(value.length - 2)}${lastChar}`
    } else {
      el.textContent = value || ''
    }
  }
})

使用方式:

<p v-desensitize="name"></p>

使用工具函数

创建一个单独的工具函数来处理脱敏逻辑:

// utils/desensitize.js
export function desensitizeName(name) {
  if (!name) return ''
  if (name.length <= 2) return name.charAt(0) + '*'
  return name.charAt(0) + '*'.repeat(name.length - 2) + name.slice(-1)
}

在组件中使用:

import { desensitizeName } from '@/utils/desensitize'

export default {
  computed: {
    desensitizedName() {
      return desensitizeName(this.name)
    }
  }
}

处理不同长度的姓名

针对不同长度的姓名可以有不同的脱敏策略:

function desensitizeName(name) {
  if (!name) return ''
  const length = name.length

  if (length === 1) return name
  if (length === 2) return `${name[0]}*`
  if (length === 3) return `${name[0]}*${name[2]}`
  return `${name[0]}${'*'.repeat(length - 2)}${name[length - 1]}`
}

注意事项

vue实现姓名脱敏

  1. 对于复姓或多字姓名,可能需要特殊处理
  2. 考虑国际化需求,不同语言环境下的姓名格式可能不同
  3. 性能考虑,避免在大量数据时频繁调用脱敏函数
  4. 可配置性,允许自定义脱敏规则和替换字符

以上方法可以根据实际项目需求选择使用,计算属性和过滤器方式较为简单,而指令和工具函数方式则更具复用性和灵活性。

标签: 姓名vue
分享给朋友:

相关文章

vue实现页面截屏

vue实现页面截屏

使用html2canvas库实现截屏 html2canvas是一个流行的JavaScript库,可以将DOM元素转换为Canvas图像。在Vue项目中安装html2canvas: npm insta…

vue聊天实现

vue聊天实现

Vue 聊天应用实现步骤 创建 Vue 项目 使用 Vue CLI 或 Vite 初始化项目,安装必要依赖(如 Vue 3、Element UI 或 Vuetify 用于 UI 组件)。 npm c…

vue 实现直播

vue 实现直播

Vue 实现直播的基本方法 在Vue中实现直播功能,通常需要结合WebRTC、RTMP或HLS等技术。以下是几种常见的实现方式: 使用WebRTC实现实时直播 WebRTC适合低延迟的实时直播场景,…

vue实现表白

vue实现表白

Vue 实现表白页面 使用 Vue 可以快速创建一个动态、交互式的表白页面。以下是一个简单的实现方案: 基础结构 创建一个 Vue 项目或单文件组件,包含以下核心部分: <template&…

vue 实现筛选

vue 实现筛选

实现筛选功能的基本方法 在Vue中实现筛选功能通常涉及以下几个核心步骤: 数据绑定与筛选逻辑 使用v-model绑定筛选条件到Vue实例的数据属性,结合计算属性实现动态筛选: data() {…

vue 实现树状

vue 实现树状

Vue 实现树状结构的方法 递归组件实现树状结构 递归组件是 Vue 中实现树状结构的常见方法。通过组件自身调用自身,可以轻松构建多层级树状结构。 <template> <ul…