使用PHP正则表达式部分隐藏电子邮件地址

时间:2015-05-14 09:30:33

标签: php regex

我找到了两个主题,这些主题最初似乎可以回答我的问题,但它们似乎只能让我找到解决方案的一部分。使用它们我已经到了我的位置。所以这不是重复的!

我想用星号替换电子邮件地址的名称部分和域部分中除第一个字符外的所有字符:

例如

  

g ****** @ g ****。com或g ****** @ g ****。co.uk

$email2 = preg_replace('/(?<=.).(?=.*@)/', '*', $email);
$email3 = preg_replace('/(?<=@.)[a-zA-Z0-9-]*(?=(?:[.]|$))/', '*', $email2);

几乎就在那里但给了我 g ****** @ g * .com 而不是 g ****** @ g *****。com

有人可以帮我解决正则表达式吗?

2 个答案:

答案 0 :(得分:4)

您可以使用:

$email = preg_replace('/(?:^|@).\K|\.[^@]*$(*SKIP)(*F)|.(?=.*?\.)/', '*', $email);

RegEx Demo

这会将great@gmail.com变为g*****@g*****.com

myemail@gmail.co.uk将成为m*******@g*****.co.uk

test.test@gmail.com加入t*********@g*****.com

答案 1 :(得分:0)

^.\K|.(?=.*@)|@.\K|\..*(*SKIP)(*F)|.(?=.*\.)

你可以试试这个。*。见。演示。

https://regex101.com/r/mT0iE7/20