掩码电子邮件正则表达式

ogb*_*jnr 1 php regex pecl

我正在尝试做一个 php regexp 来屏蔽电子邮件,以便

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

$maskedEmail=preg_replace('/^*@/', '*', $email);
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 5

您可以使用

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

请参阅正则表达式演示

细节

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

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