屏蔽电子邮件正则表达式

Mask email regexp

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

example@gmail.come*****e@gmail.com.

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

您可以使用

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

regex demo

详情

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

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

为了不屏蔽第一个字符,您可以断言直接在左边的不是字符串的开头。

为了不直接屏蔽 @ 之前的字符,您可以在匹配之前断言右边的始终是一个不是 @ 的字符。

(?<!^).(?=[^@]+@)

在替换使用中:

*

说明

  • (?<!^) 负后向,断言直接在左边的不是字符串的开头
  • . 匹配除换行符外的任何字符
  • (?=正向前瞻,断言直接在右边的是
  • ) 关闭正面前瞻

Regex demo | Php demo

例如

$email = "example@gmail.com";
$maskedEmail=preg_replace('/(?<!^).(?=[^@]+@)/', '*', $email);
echo $maskedEmail;

结果

e*****e@gmail.com