用替代词使用php掩盖邮件

时间:2015-04-02 09:00:57

标签: php email

下面提到的是虚拟电子邮件ID,

abcdefghij@gmail.com

如何使用PHP部分屏蔽此电子邮件ID?

我需要输出    a*c*e*g*i*@gmail.com

我已尝试过以下代码,但它不适用于以下要求

      $prop=3;
$domain = substr(strrchr($Member_Email, "@"), 1);
$mailname=str_replace($domain,'',$Member_Email);
$name_l=strlen($mailname);
$domain_l=strlen($domain);
    for($i=0;$i<=$name_l/$prop-1;$i++)
    {
    $start.='*';
    }

    for($i=0;$i<=$domain_l/$prop-1;$i++)
    {
    $end.='*';
    }

$MaskMail = substr_replace($mailname, $start,2, $name_l/$prop).substr_replace($domain, $end, 2, $domain_l/$prop);

4 个答案:

答案 0 :(得分:0)

尝试这样的尝试。

$delimeter = '@';
$mail_id = 'abcdefghij@gmail.com';
$domain = substr(strrchr($mail_id, $delimeter), 1);
$user_id = substr($mail_id,0,strpos($mail_id, $delimeter));
$string_array = str_split($user_id);

$partial_id = NULL;

foreach($string_array as $key => $val){

    if($key % 2 == 0){ 
        $partial_id .=$val;
    }else{
        $partial_id .='*' ;
    }

}
echo $partial_id.$delimeter.$domain;

答案 1 :(得分:0)

$mail='abcdefghij@gmail.com';

$mail_first=explode('@',$mail);
$arr=str_split($mail_first[0]);
$mask=array();

for($i=0;$i<count($arr);$i++) {
    if($i%2!=0) {
        $arr[$i]='*';
    }

    $mask[]=$arr[$i];
}

$mask=join($mask).'@'.$mail_first[1];
echo $mask;

结果是:

a*c*e*g*i*@gmail.com

答案 2 :(得分:0)

这是一个 no loop 方法,用掩码替换电子邮件用户名的每个第二个字符。

自定义PHP函数使用本机函数splitpreg_replace使用正则表达式/(.)./implode

echo email_mask('abcdefghi@gmail.com');
// a*c*e*g*i*k*@gmail.com

function email_mask($email) {
    list($email_username, $email_domain) = split('@', $email);
    $masked_email_username = preg_replace('/(.)./', "$1*", $email_username);
    return implode('@', array($masked_email_username, $email_domain));
}

正则表达式说明:

正则表达式从字符串的开头开始,匹配2个字符并捕获这两个字符中的第一个,将匹配替换为第一个字符后跟星号*preg_replace在剩下的字符串中重复此操作,直到它不再匹配一对字符。

答案 3 :(得分:0)

是否需要有那么多的星号? 这样读起来很难。

我建议你保持简单。 也许这样的事情就足够了 https://github.com/fedmich/PHP_Codes/blob/master/mask_email.php

使用电子邮件显示前3个字符,然后显示@符号前面的最后一个字符

ABCDEFZ@gmail.com成为 甲***** Z@gmail.com

以下是Github链接中的完整代码

function mask_email( $email ) {
    /*
    Author: Fed
    Simple way of masking emails
    */

    $char_shown = 3;

    $mail_parts = explode("@", $email);
    $username = $mail_parts[0];
    $len = strlen( $username );

    if( $len <= $char_shown ){
        return implode("@", $mail_parts );  
    }

    //Logic: show asterisk in middle, but also show the last character before @
    $mail_parts[0] = substr( $username, 0 , $char_shown )
        . str_repeat("*", $len - $char_shown - 1 )
        . substr( $username, $len - $char_shown + 2 , 1  )
        ;

    return implode("@", $mail_parts );
}