当前位置:首页 > 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实现姓名脱敏

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

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>

使用工具函数

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

vue实现姓名脱敏

// 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]}`
}

注意事项

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

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

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

相关文章

vue实现用户信息删除

vue实现用户信息删除

Vue 实现用户信息删除功能 在 Vue 中实现用户信息删除功能通常涉及前端界面交互和后端 API 调用。以下是实现步骤: 前端界面设计 创建删除按钮或操作项,通常使用 @click 事件触发删除操…

vue 实现拖拽

vue 实现拖拽

Vue 实现拖拽功能 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性和相关事件实现拖拽功能。 <template> &l…

vue 实现拖动

vue 实现拖动

Vue 实现拖动的几种方法 在Vue中实现拖动功能可以通过多种方式,包括原生HTML5的拖放API、第三方库如vuedraggable等。以下是几种常见的实现方法: 使用HTML5拖放API HTM…

vue实现曲线

vue实现曲线

Vue 实现曲线的方法 在 Vue 中实现曲线可以通过多种方式,包括使用 SVG、Canvas 或第三方库如 D3.js、ECharts 等。以下是几种常见的方法: 使用 SVG 绘制曲线 SVG…

vue底层实现

vue底层实现

Vue.js 的底层实现原理 Vue.js 是一个渐进式 JavaScript 框架,其核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是其关键实现细节: 响应式系统 Vue 2…

vue实现通讯

vue实现通讯

Vue 组件通讯方法 父子组件通讯 父组件向子组件传递数据通过 props,子组件向父组件传递数据通过 $emit 事件。 父组件模板: <child-component :message=…