使用正则表达式实现邮箱地址掩码遇阻,求正确方案
邮箱地址掩码的正确正则实现方案
需求分析
输入邮箱 harrypotter@howarts.com,期望输出 ha*****er@how*****.com,核心规则:
- 用户名(@前部分):保留前2个字符和最后2个字符,中间字符替换为
* - 域名前缀(@后至
.前部分):保留前3个字符,剩余字符替换为* - 域名后缀(
.之后部分)保持不变
问题根源
你当前使用的正则仅保留了用户名的首尾各1个字符,不符合保留前2后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
相关产品推荐
相关产品推荐

