首页 > 解决方案 > 屏蔽电子邮件正则表达式

问题描述

我正在尝试做一个 php 正则表达式来屏蔽电子邮件,以便

example@gmail.com 转向e*****e@gmail.com.

$maskedEmail=preg_replace('/^*@/', '*', $email);

标签: phpregexpecl

解决方案


您可以使用

preg_replace('~((?!^)\G|^[^@])[^@](?=[^@]+@)~', '$1*', $s)

查看正则表达式演示

细节

  • ((?!^)\G|^[^@])- 第 1 组:上一个匹配的结尾或字符串的开头以及除 a 之外的任何字符@
  • [^@]- 一个字符以外的字符@
  • (?=[^@]+@)- 除了紧跟在当前位置右侧的a 之外 ,需要 1+ 个字符(这+在此处很重要,您不能使用*)的正向前瞻。@@

替换是在第 1 组中捕获的值(以便第一个字符保留在字符串中,然后除 a 之前的最后一个字符之外的所有字符@ 都替换为*.


推荐阅读