在php中隐藏部分电子邮件地址

时间:2014-07-06 22:34:24

标签: php email

我遇到了麻烦.. 我想隐藏电子邮件地址,如下例所示: 而不是此电子邮件地址:testemail@gmail.com 我想要这个te********@g***.com 我已经尝试过这个功能但它没有用!!

  

$ newemail = preg_replace(' /(?< =。)。(?=。 @)/ u',' ',testemail @ gmail.com);

它隐藏了电子邮件的域名,而不是整个域名! 如果你们有一个更好的,因为我一遍又一遍地搜索而且我没有看到任何可以解决这个问题的话题。

2 个答案:

答案 0 :(得分:2)

让我们学习正则表达式!

好的,我们的要求是:

  

通过正则表达式将此处的粗体转换为* s:

     

stemail @ g 邮件 .com

分解:

  
      
  1. 将2个字符和@之间的字符转换为*
  2.   
  3. 将@,然后是字符和“.com”之间的字符转换为*
  4.   

换句话说:

  

匹配2个字符和@

之间的字符      

或@ +一个字符和“.com”之间的字符

     

替换为“*”。

正确的正则表达式是:

(?<=.).(?=.*?@)|(?<=@.).*(?=\.com)

所以用

替换你的代码
$newemail = preg_replace('/(?<=.).(?=.*?@)|(?<=@.).*(?=\.com)/u', '', 'testemail@gmail.com');

查看regex demo

优化: The following regex的工作方式相同,但运行速度更快。

(?<=.).(?=[^@]+@)|(?<=@.).*(?=\.com)

答案 1 :(得分:1)

如果你可以使用正则表达式以外的东西:

$email = explode('@', "testemail@gmail.com");
$first_part = $email[0];
$domain = $email[1];

$newemail = substr($first_part, 0, 2) . "********@" . substr($domain, 0, 1) . "***." . end(explode('.', $domain));

虽然这是一项工作,但它会对电子邮件地址做一些事情,并以与您所描述的格式相似的格式将其重新组合在一起。