2

我正在输出日志消息,需要隐藏其中的电子邮件地址。

日志消息可能如下所示:

A lead was saved for sharon.davis@website.com, Date: 11th December 2019, Service: Car Hire ( Premium ), Extras: NA, Price: £300

我在用:

preg_replace('/(?<=.).(?=.*?@)|(?<=@.).*(?=\.com)/u', '*', $email);

我正在使用这个正则表达式来隐藏电子邮件,当它只是一封电子邮件时效果很好,但在一个句子中,它会这样做......

A********************************@website.com, Date: 11th December 2019, Service: Car Hire ( Premium ), Extras: NA, Price: £300

有没有办法让它回到空间最远?

所以需要的结果是:

A lead was saved for ************@website.com, Date: 11th December 2019, Service: Car Hire ( Premium ), Extras: NA, Price: £300",
4

1 回答 1

0

如果目标是模糊/混淆电子邮件地址,那么不要让任何人知道有多少字符被转换为星号。

匹配 the 之前的子字符串@并用静态数量的星号替换它们。

代码:(演示

$string = 'A lead was space" ema il "@emailadds.com saved for sharon.davis@website.com, Date: 11th December 2019, Service: Car Hire ( Premium ), Extras: NA, Price: £300';

echo preg_replace('/(?:[^"\s@]+|"[^"]*")+(?=@[^\s.]+\.)/', '******', $string);

输出:

A lead was ******@emailadds.com saved for ******@website.com, Date: 11th December 2019, Service: Car Hire ( Premium ), Extras: NA, Price: £300
于 2021-01-05T13:14:25.287 回答