求取满足指定掩码规则的邮箱地址脱敏处理正则表达式
邮箱脱敏实现方案
纯正则无法独立完成你要的效果,因为涉及动态计算星号补位数量的逻辑,需要配合代码的字符串操作实现,以下是可落地的方案:
核心思路
先用正则捕获邮箱的三个核心分组:用户名前3位、用户名剩余部分、@后的域名,再根据规则判断生成掩码后的用户名即可。
捕获用正则
^(.{1,3})(.*?)@(.*)$
分组说明:
- 组1:用户名前1~3位字符
- 组2:用户名除前3位外的剩余字符
- 组3:@符号后的域名部分
代码实现示例
JavaScript 版本
function maskEmail(email) { const matchResult = email.match(/^(.{1,3})(.*?)@(.*)$/); // 非法邮箱格式直接返回原值 if (!matchResult) return email; const [, prefix, restPart, domain] = matchResult; const originUsernameLen = prefix.length + restPart.length; let maskedUsername; if (originUsernameLen > 3) { const showPart = prefix.slice(0, 3); const starCount = Math.max(originUsernameLen - 3, 5); maskedUsername = showPart + '*'.repeat(starCount); } else { maskedUsername = prefix[0] + '*'.repeat(7); } return `${maskedUsername}@${domain}`; }
测试效果
maskEmail('test123456789@gmail.com') // 返回 tes**********@gmail.com maskEmail('test1@gmail.com') // 返回 tes*****@gmail.com maskEmail('tes@gmail.com') // 返回 t*******@gmail.com maskEmail('a@gmail.com') // 返回 a*******@gmail.com maskEmail('ab@gmail.com') // 返回 a*******@gmail.com
补充说明
如果一定要用纯正则替换,只能覆盖固定长度的用户名场景,无法适配所有长度的动态补位需求,配合简单的字符串操作是成本最低的实现方式。
内容的提问来源于stack exchange,提问作者RohitK
相关产品推荐
相关产品推荐

