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
相关产品推荐
相关产品推荐

