/** 手机号展示脱敏(中间四位 ****) */ export function maskPhone(phone) { if (phone == null || phone === '') return '' const str = String(phone).trim() if (str.includes('****')) return str const digits = str.replace(/\D/g, '') if (digits.length === 11) { return `${digits.slice(0, 3)}****${digits.slice(7)}` } if (digits.length > 4) { const hideLen = Math.min(4, digits.length - 3) const start = Math.floor((digits.length - hideLen) / 2) return `${digits.slice(0, start)}${'*'.repeat(hideLen)}${digits.slice(start + hideLen)}` } return str } /** 个人中心头部:138****6789 已绑定微信 */ export function formatMemberCenterPhone(phone) { const masked = maskPhone(phone) return masked ? `${masked} 已绑定微信` : '' } /** 保存前规范化:尽量存 11 位数字;已是脱敏串则原样保留 */ export function normalizePhoneForStore(phone) { const str = String(phone || '').trim() if (!str) return '' if (str.includes('****')) return str const digits = str.replace(/\D/g, '') if (digits.length >= 11) return digits.slice(0, 11) return digits || str }