我试图用PHP实现以下功能
sample@gmail.com => s*****@gmail.com
sa@yahoo.com => **@yahoo.com
sampleaddress@hotmail.com => samplead*****@hotmail.com
我想要隐藏在' @'
之前的部分中的最后五个字符我可以通过拆分然后根据长度替换来编写长代码,但我确定必须有一个简单的方法来使用PHP函数来做这个,请帮忙吗?
更新:
我在这里添加我的代码,我确定它效率不高,这就是我在这里问的原因
$email = 'sampleuser@gmail.com';
$star_string = '';
$expl_set = explode('@',$email);
if(strlen ($expl_set[0]) > 5){$no_stars = 5; }else{$no_stars = strlen ($expl_set[0]); }
for($i=0;$i<$no_stars; $i++)
{
$star_string.='*';
}
$masked_email = substr($expl_set[0], 0, -5).$star_string.'@'.$expl_set[1];
答案 0 :(得分:3)
您可以将其包装到一个函数中,从而可以更轻松地多次调用。
基本上,拆分地址和域,用$mask
替换字符串末尾的*
个字符数(默认值为5),或者地址的长度为{}}短于掩码字符的数量。
function mask_email($email, $masks = 5) {
$array = explode("@", $email);
$string_length = strlen($array[0]);
if ($string_length < $masks)
$masks = $string_length;
$result = substr($array[0], 0, -$masks) . str_repeat('*', $masks);
return $result."@".$array[1];
}
以上将像这样使用
echo mask_email("test@test.com")."\n";
echo mask_email("longeremail@test.com");
将输出此
**** @ test.com
较长***** @ test.com
您还可以使用第二个参数指定要过滤的数字,该参数是可选的。
echo mask_email("longeremail@test.com", 2); // Output: longerema**@test.com