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

如何实现指定规则的邮箱掩码?求JS代码优化方案

问题分析与解决方案

当前代码的遗漏点

  1. 星号数量固定,不匹配原字符长度:你的代码用固定的***替换用户名和@后域名前缀的剩余字符,但示例要求星号数量需和被替换的字符数一致(比如用户名harrypotter共11位,需替换10个字符为10个*),固定3个*无法满足这个要求。
  2. 未处理.com部分的掩码:规则要求.com仅显示.后的第一个字符(示例中的c),其余字符替换为*,但你的代码完全保留了.com,没有做掩码处理。

更简洁的实现方式

可以通过拆分邮箱各部分,根据原长度生成对应数量的星号,逻辑清晰且符合需求:

const maskEmail = email => {
  const [username, domain] = email.split('@');
  const [prefix, suffix] = domain.split('.');
  return [
    username[0] + '*'.repeat(username.length - 1),
    prefix[0] + '*'.repeat(prefix.length - 1),
    suffix[0] + '*'.repeat(suffix.length - 1)
  ].join('@.');
};

// 测试
console.log(maskEmail('harrypotter@gmail.com')); // 输出: h**********@g****.c**

也可以用正则结合回调函数实现一次性匹配替换,适合紧凑代码场景:

const maskedEmail = 'harrypotter@gmail.com'.replace(
  /^(\w)(\w+)@(\w)(\w+)\.(\w)(\w+)$/,
  (_, p1, p2, p3, p4, p5, p6) => `${p1}${'*'.repeat(p2.length)}@${p3}${'*'.repeat(p4.length)}.${p5}${'*'.repeat(p6.length)}`
);

console.log(maskedEmail); // 输出: h**********@g****.c**

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:28:09