我目前有这个:
$value = preg_replace('@hotmail.com', '***********', $value);
$value = preg_replace('yahoo.com', '***********', $value);
$value = preg_replace('outlook.com', '***********', $value);
$value = preg_replace('mailinator.com', '***********', $value);
$value = preg_replace('live.com', '***********', $value);
$value = preg_replace('live.nl', '***********', $value);
但我怎么能像这样显示电子邮件地址:juliankuit * * ** * *** ? 电子邮件是:juliankuitert@hotmail.com
并且无需使用 * 替换所有电子邮件提供商(如hotmail.com)
提前感谢!
答案 0 :(得分:2)
echo preg_replace('/(?<=.).(?=.*@)/u','*','TestEmail@Google.com');
将返回
T********@Google.com
答案 1 :(得分:1)
我正在使用此功能
function maskEmail($email, $minLength = 3, $maxLength = 10, $mask = "***") {
$atPos = strrpos($email, "@");
$name = substr($email, 0, $atPos);
$len = strlen($name);
$domain = substr($email, $atPos);
if (($len / 2) < $maxLength) $maxLength = ($len / 2);
$shortenedEmail = (($len > $minLength) ? substr($name, 0, $maxLength) : "");
return "{$shortenedEmail}{$mask}{$domain}";
}
这个例子
echo maskEmail('abcdfghi@example.com'); // abcd***@example.com
答案 2 :(得分:0)
我的PhP太生疏了,无法提供代码示例,但这是我要使用的逻辑:
@
符号索引)*
请注意,在步骤2中,如果X <= 0,则整个字符串应替换为*
个字符
答案 3 :(得分:0)
有时也可以显示最后一个字符。
我建议你保持简单。 也许这样的事情很简单 https://github.com/fedmich/PHP_Codes/blob/master/mask_email.php
使用电子邮件显示前3个字符,然后显示@符号前面的最后一个字符
ABCDEFZ@gmail.com成为 甲***** Z@gmail.com
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 );
}