Preg_replace gmail 中的加号和点号

Preg_replace plus and dots in gmail

垃圾邮件发送者快把我逼疯了。不知道 Google 如何通过添加一个点或一个加号来允许无限的电子邮件别名。所以我需要像这样清理电子邮件:

对此:

有效的正则表达式是这样的: (?:\.|\+.*)(?=.*?@gmail\.com)

我的电子邮件函数是 $mail['email'],那么如何匹配此函数中的点和加号(如果找到)然后删除它们并清理它们?

我现在发现了什么... 可以,但不知道如何做,如果这个那么那个

preg_match( '/@gmail\.com$/', $mail['email']
preg_replace('^(?:\.|\+.*)(?=.*?@gmail\.com)$',  $mail['email'] );

您的模式已锚定,因此使用 ^(?:\.|\+.*)(?=.*?@gmail\.com)$ 将找不到单独的匹配项。

而且 +.* 可以匹配的不仅仅是加号,删除的比预期的多。

您可以使用字符 class [.+] 匹配点或加号,并使用正向先行断言 gmail.com 到右侧,仅匹配非空白字符,@除外直到遇到第一次出现的@

查看 regex101 上的比赛。

例如:

$pattern = "/[.+](?=[^\s@]*@gmail\.com)/";

$mail = ["email" => "sar+ah+.black+.+@gmail.com"];
$mail['email'] = preg_replace($pattern, '',  $mail['email'] );

print_r($mail['email']);

输出

sarahblack@gmail.com

如果你想让你的比赛成功,你可以添加到@The fourth bird answer :

preg_replace($pattern, '',  $mail['email'] ,-1,$changes);
if ($changes>0) {
    echo "Mail changed";
}