下面提到的是虚拟电子邮件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);
答案 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函数使用本机函数split
,preg_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 );
}