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

JavaScript实现邮箱地址掩码的正则表达式兼容问题求助

JavaScript邮箱掩码实现方案

实现效果

输入:thisisemail@server.com
输出:t*********l@server.com

可直接运行的实现代码

方案1:正则替换实现

function maskEmail(email) {
  // 先去除首尾空格,避免输入带空格导致正则匹配失败
  const cleanedEmail = email.trim();
  return cleanedEmail.replace(/^(\w)(.+)(\w)@(.+)$/, (_, first, mid, last, domain) => {
    return `${first}${'*'.repeat(mid.length)}${last}@${domain}`;
  });
}

// 测试
console.log(maskEmail('thisisemail@server.com')); 
// 输出结果:t*********l@server.com

方案2:字符串拆分实现(兼容性更高,避免正则边界匹配问题)

很多场景下正则在浏览器失效是因为没有考虑特殊输入场景,该方案兼容性更强:

function maskEmail(email) {
  const cleanedEmail = email.trim();
  // 拆分邮箱用户名和域名
  const [username, domain] = cleanedEmail.split('@');
  // 非法格式直接返回原内容
  if (!username || !domain) return cleanedEmail;
  const usernameLen = username.length;
  // 短用户名兼容处理
  if (usernameLen <= 1) return `${username}@${domain}`;
  if (usernameLen === 2) return `${username[0]}*@${domain}`;
  // 常规长度用户名替换
  return `${username[0]}${'*'.repeat(usernameLen - 2)}${username.at(-1)}@${domain}`;
}

常见浏览器失效原因

  • 输入的邮箱字符串带首尾空格,测试站点默认做了 trim 处理,浏览器环境没有预处理
  • 正则没有考虑用户名长度为1/2的边界场景,匹配失败返回原字符串
  • 正则写法错误,比如漏写捕获组、误用标识符导致匹配规则不符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:57:01