vue实现姓名脱敏
Vue 实现姓名脱敏的方法
在Vue中实现姓名脱敏可以通过多种方式完成,以下是几种常见的方法:
使用计算属性脱敏
<template>
<div>{{ maskedName }}</div>
</template>
<script>
export default {
data() {
return {
name: '张三丰'
}
},
computed: {
maskedName() {
if (this.name.length <= 1) return this.name
return this.name.charAt(0) + '*'.repeat(this.name.length - 1)
}
}
}
</script>
使用过滤器脱敏
<template>
<div>{{ name | maskName }}</div>
</template>
<script>
export default {
data() {
return {
name: '李四'
}
},
filters: {
maskName(value) {
if (!value) return ''
if (value.length <= 1) return value
return value.charAt(0) + '*'.repeat(value.length - 1)
}
}
}
</script>
使用自定义指令脱敏
<template>
<div v-mask-name="name"></div>
</template>
<script>
export default {
data() {
return {
name: '王五'
}
},
directives: {
'mask-name': {
bind(el, binding) {
const name = binding.value
if (name.length <= 1) {
el.textContent = name
} else {
el.textContent = name.charAt(0) + '*'.repeat(name.length - 1)
}
}
}
}
}
</script>
使用方法脱敏
<template>
<div>{{ maskName(name) }}</div>
</template>
<script>
export default {
data() {
return {
name: '赵六'
}
},
methods: {
maskName(name) {
if (!name) return ''
if (name.length <= 1) return name
return name.charAt(0) + '*'.repeat(name.length - 1)
}
}
}
</script>
不同脱敏规则实现
*保留姓氏,名字用代替
function maskName(name) {
if (!name) return ''
if (name.length <= 1) return name
return name.charAt(0) + '*'.repeat(name.length - 1)
}
*保留首尾字符,中间用代替
function maskName(name) {
if (!name) return ''
if (name.length <= 2) return name
return name.charAt(0) + '*'.repeat(name.length - 2) + name.charAt(name.length - 1)
}
复姓处理

function maskName(name) {
if (!name) return ''
const compoundSurnames = ['欧阳', '上官', '司马', '诸葛'] // 常见复姓列表
for (const surname of compoundSurnames) {
if (name.startsWith(surname)) {
return surname + '*'.repeat(name.length - surname.length)
}
}
if (name.length <= 1) return name
return name.charAt(0) + '*'.repeat(name.length - 1)
}
注意事项
- 处理空值或非法输入时应有容错机制
- 考虑国际化场景,不同语言姓名可能有不同格式
- 复姓处理需要根据实际业务需求调整
- 性能考虑,频繁更新的数据建议使用计算属性
以上方法可以根据实际业务需求组合使用或调整脱敏规则。






