You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中按指定规则部分隐藏邮箱地址?

解决邮箱掩码不符合预期的问题

看起来你想要保留邮箱本地部分的特定字符,而不是简单保留前4位后全部替换成星号。咱们先看看你原来的代码为什么不对,再给出正确的实现方式。

原代码的问题

你写的正则(.{4})(.*)(?=@)会把邮箱的本地部分拆成前4个字符和剩下的所有字符两个分组。替换函数里你把剩下的每个字符都换成星号加到前4位后面,结果自然是exam*******@domain.com——这和你想要保留特定片段的需求完全不匹配。

正确实现方式

针对你想要把examplemail@domain.com转换成ex**pl**ai*@domain.com的需求,我们可以拆分邮箱的本地部分和域名部分,精准保留需要的字符片段,再拼接起来:

方式1:字符串切片拼接

这种方式直观易懂,适合固定格式的邮箱:

const email = 'examplemail@domain.com';
// 拆分成本地名和域名
const [localPart, domainPart] = email.split('@');
// 按照需求拼接掩码后的本地部分:前2位 + ** + 第5-6位(p和l) + ** + 第9-10位(a和i) + *
const maskedLocal = `${localPart.slice(0, 2)}**${localPart.slice(4, 6)}**${localPart.slice(8, 10)}*`;
// 组合成最终邮箱
const maskedEmail = `${maskedLocal}@${domainPart}`;

console.log(maskedEmail); // 输出:ex**pl**ai*@domain.com

方式2:正则分组替换

如果想用正则一次性处理,可以通过分组匹配每个需要保留或替换的片段:

const email = 'examplemail@domain.com';
// 正则分组匹配各个片段,替换需要隐藏的部分
const maskedEmail = email.replace(/^(..)(..)(..)(..)(..)(.)@(.*)$/, '$1**$3**$5*@$7');

console.log(maskedEmail); // 输出:ex**pl**ai*@domain.com

两种方式都能得到你想要的结果,如果你有更通用的掩码规则(比如适配不同长度的邮箱),可以随时调整切片位置或正则分组哦~

内容的提问来源于stack exchange,提问作者AmJaradat01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 18:47:48