手机号中间脱敏
在 CRM 列表、导出预览、分享文案中,把 13812345678 显示为 138****5678,避免完整号码明文露出。
何时使用
- 用户要求「手机号脱敏」「隐藏中间四位」「列表里别露全号」
- 跟进记录、客户卡片需要可逆业务字段保留原文、仅展示层打码
硬约束
- 仅处理中国大陆 11 位、以
1开头的号码;其它输入原样返回并提示原因。 - 展示层打码,不要覆盖存储用的原始手机号字段。
- 打码格式固定:
前3 + **** + 后4。 - 成功/失败都要有可读提示(成功示例与失败原因)。
核心实现
export function maskCnMobile(input: string): { ok: boolean; value: string; message: string } {
const s = String(input ?? '').trim().replace(/[\s-]/g, '');
if (!/^1\d{10}$/.test(s)) {
return { ok: false, value: String(input ?? ''), message: '不是有效的 11 位大陆手机号,已原样返回' };
}
const value = `${s.slice(0, 3)}****${s.slice(7)}`;
return { ok: true, value, message: `已脱敏:${value}` };
}
验收
13812345678→138****5678,并提示成功138 1234 5678/138-1234-5678先归一化再打码12345、空串、固话 → 不打码,说明原因