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

使用正则表达式实现邮箱地址掩码遇阻,求正确方案

邮箱地址掩码的正确正则实现方案

需求分析

输入邮箱 harrypotter@howarts.com,期望输出 ha*****er@how*****.com,核心规则:

  • 用户名(@前部分):保留前2个字符和最后2个字符,中间字符替换为*
  • 域名前缀(@后至.前部分):保留前3个字符,剩余字符替换为*
  • 域名后缀(.之后部分)保持不变

问题根源

你当前使用的正则仅保留了用户名的首尾各1个字符,不符合保留前2后2的需求,导致输出偏差。

正确实现方案

我们可以分两步处理,分别对用户名和域名前缀进行掩码替换:

正则表达式与替换逻辑

  1. 处理用户名部分:匹配@之前、前2个字符之后、最后2个字符之前的所有字符,替换为*
    正则:(?<=^.{2})[^@](?=.{2}@)

  2. 处理域名前缀部分:匹配@之后、前3个字符之后、.之前的所有字符,替换为*
    正则:(?<=@.{3})[^.](?=.*\.)

代码示例(Python)

import re

original_email = "harrypotter@howarts.com"

# 掩码用户名部分
masked_email = re.sub(r'(?<=^.{2})[^@](?=.{2}@)', '*', original_email)
# 掩码域名前缀部分
masked_email = re.sub(r'(?<=@.{3})[^.](?=.*\.)', '*', masked_email)

print(masked_email)
# 输出:ha*******er@how*****.com

代码示例(JavaScript)

const originalEmail = "harrypotter@howarts.com";

// 掩码用户名部分
let maskedEmail = originalEmail.replace(/(?<=^.{2})[^@](?=.{2}@)/g, '*');
// 掩码域名前缀部分
maskedEmail = maskedEmail.replace(/(?<=@.{3})[^.](?=.*\.)/g, '*');

console.log(maskedEmail);
// 输出:ha*******er@how*****.com

可选调整(固定数量*)

如果需要像示例那样使用固定数量的*(忽略原中间段长度),可以修改替换逻辑:

  • 用户名正则改为 ^(..)(.*)(..)@,替换为 $1*****$3@
  • 域名前缀正则改为 @(...)(.*)\.(.*)$,替换为 @$1*****.$3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:10:54