如何使用PHP

时间:2017-03-26 23:37:03

标签: php replace

我试图用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];

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

Live demo