正则能否替换匹配组的部分字符?邮箱部分脱敏实现方案问询
正则实现邮箱指定位置脱敏方案
这个需求可以通过正则实现,核心是使用零宽断言锁定需要替换的字符位置,不需要额外拆分字符串处理,同时可以兼容你之前的短字符场景和长字符场景。
适配需求的正则规则
完整正则(PCRE兼容,支持Python、Java、Go、ES2018+版JavaScript、PHP等主流编程语言)
^[^@]{1,3}(?=[^@]*@)|(?<=@)[^.]{1,3}(?=[^.]*\.)
替换规则
直接替换所有匹配结果为 *** 即可。
效果验证
- 测试短邮箱
123@abc.com:匹配到123和abc,替换结果为***@***.com,兼容旧场景 - 测试长邮箱
example123@abcdef.com:匹配到开头的exa和 @ 后的abc,替换结果为***mple123@***def.com,完全符合需求 - 测试极端短邮箱
a@bcd.com:匹配到a和bcd,替换结果为***@***.com,满足脱敏要求
自定义调整方法
如果需要替换的字符数量不是3个,做两处修改即可:
- 把正则中的
{1,3}改为对应数量,比如替换前2个就改成{1,2} - 替换内容的
*数量和替换长度保持一致即可
内容的提问来源于stack exchange,提问作者banktomato
相关产品推荐
相关产品推荐

