屏蔽电子邮件正则表达式

时间:2019-08-12 15:41:35

标签: php regex pecl

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

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

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

2 个答案:

答案 0 :(得分:3)

您可以使用

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

请参见regex demo

详细信息

  • ((?!^)\G|^[^@])-第1组:上一个匹配项的末尾或字符串的开始以及除@之外的其他任何字符
  • [^@]-除@之外的一个字符
  • (?=[^@]+@)-一个积极的前瞻,需要1个以上的字符(+在这里很重要,您不能使用*),除@之后是{ {1}}立即位于当前位置的右侧。

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

答案 1 :(得分:0)

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

要不直接在@之前屏蔽字符,可以断言在匹配之前,右边总是一个不是@的字符。

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

在替换使用中:

*

说明

  • (?<!^),在向后寻找负数时,断言直接在左侧的不是字符串的开头
  • .匹配换行符以外的任何字符
  • (?=正向前进,断言右边直接是
  • )积极回望

Regex demo | Php demo

例如

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

结果

  

e ***** e@gmail.com