js实现脱敏
实现字符串脱敏的常见方法
在JavaScript中实现字符串脱敏(即隐藏敏感信息的部分内容)可以通过多种方式完成。以下是几种典型场景的实现方案:
手机号脱敏
手机号通常显示前3位和后4位,中间用星号替代:

function maskPhone(phone) {
return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1$2');
}
// 示例:maskPhone('13812345678') → "1385678"
身份证号脱敏
身份证号保留前4位和后4位:
function maskIdCard(id) {
return id.replace(/(\d{4})\d{10}(\w{4})/, '$1$2');
}
// 示例:maskIdCard('110105199003072774') → "11012774"
姓名脱敏
中文姓名通常保留姓氏,名字用星号代替:

function maskName(name) {
if (name.length <= 1) return name;
return name[0] + '*'.repeat(name.length - 1);
}
// 示例:maskName('张三') → "张*"
通用脱敏函数
更灵活的脱敏函数,可自定义保留位数和替换符号:
function maskString(str, visibleStart = 3, visibleEnd = 4, maskChar = '*') {
if (str.length <= visibleStart + visibleEnd) return str;
const start = str.slice(0, visibleStart);
const end = str.slice(-visibleEnd);
return start + maskChar.repeat(str.length - visibleStart - visibleEnd) + end;
}
// 示例:maskString('abcdefghijk', 2, 3) → "abijk"
邮箱脱敏
保留邮箱前缀前2位和后1位:
function maskEmail(email) {
const [prefix, domain] = email.split('@');
const maskedPrefix = prefix.length > 3
? prefix.slice(0, 2) + '*'.repeat(prefix.length - 3) + prefix.slice(-1)
: prefix;
return maskedPrefix + '@' + domain;
}
// 示例:maskEmail('example@domain.com') → "ex*e@domain.com"
注意事项
- 处理前应验证输入字符串的有效性
- 对于不同长度的字符串可能需要不同的脱敏策略
- 敏感数据的定义可能因业务场景而异
- 在前端展示脱敏数据时,建议后端也进行相应处理
这些方法可以根据具体业务需求进行调整,确保在保护用户隐私的同时不影响正常业务功能。






