繁体   English   中英

如何用星号替换某些字符

[英]How To Replace Some Characters With Asterisks

我有一个与PHP有关的简单任务,但由于我不熟悉正则表达式或其他东西......我不知道我将要做什么。

我想要的是非常简单的......

假设我有这些变量:

$Email = 'john@example.com'; // output : ****@example.com
$Email2 = 'janedoe@example.com'; // output : *******@example.com
$Email3 = 'johndoe2012@example.com'; // output : ***********@example.com

$Phone = '0821212121'; // output : 082121**** << REPLACE LAST FOUR DIGIT WITH *

如何用PHP做到这一点? 谢谢。

你需要一个特定的功能。 对于邮件:

function hide_mail($email) {
    $mail_segments = explode("@", $email);
    $mail_segments[0] = str_repeat("*", strlen($mail_segments[0]));

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

echo hide_mail("example@gmail.com");

对于电话号码

function hide_phone($phone) {
    return substr($phone, 0, -4) . "****";
}

echo hide_phone("1234567890");

看到了吗? 没有使用单个正则表达式。 但这些功能并不检查有效性。 您需要确定什么类型的字符串是什么,并调用适当的函数。

对于电子邮件,此功能保留第一个字母:

function hideEmail($email)
{
    $parts = explode('@', $email);
    return substr($parts[0], 0, min(1, strlen($parts[0])-1)) . str_repeat('*', max(1, strlen($parts[0]) - 1)) . '@' . $parts[1];
}

hideEmail('hello@domain.com'); //  h****@domain.com
hideEmail('hi@domain.com');    //  h*@domain.com
hideEmail('h@domain.com');     //  *@domain.com

我尝试使用单一正则表达式解决方案,但由于可变长度的星号,我认为不可能。 也许是这样的:

function anonymiseString($str)
{
  if(is_numeric($str))
  {
     $str = preg_replace('/^(\d*?)\d{4}$/', '$1****');
  }
  elseif(($until = strpos($str, '@')) !== false)
  {
     $str = str_repeat('*', $until) . substr($str, $until + 1);
  }
  return $str;
}

我创建了一个函数来做到这一点,对我来说很好。 我希望有所帮助。

function ofuscaEmail($email, $domain_ = false){

    $seg = explode('@', $email);
    $user = '';
    $domain = '';

    if (strlen($seg[0]) > 3) {
        $sub_seg = str_split($seg[0]);
        $user .= $sub_seg[0].$sub_seg[1];
        for ($i=2; $i < count($sub_seg)-1; $i++) { 
            if ($sub_seg[$i] == '.') {
                $user .= '.';
            }else if($sub_seg[$i] == '_'){
                $user .= '_';
            }else{
                $user .= '*';
            }
        }
        $user .= $sub_seg[count($sub_seg)-1];
    }else{
        $sub_seg = str_split($seg[0]);
        $user .= $sub_seg[0];
        for ($i=1; $i < count($sub_seg); $i++) { 
            $user .= ($sub_seg[$i] == '.') ? '.' : '*';
        }
    }

    $sub_seg2 = str_split($seg[1]);
    $domain .= $sub_seg2[0];
    for ($i=1; $i < count($sub_seg2)-2; $i++) { 
        $domain .= ($sub_seg2[$i] == '.') ? '.' : '*';
    }

    $domain .= $sub_seg2[count($sub_seg2)-2].$sub_seg2[count($sub_seg2)-1];

    return ($domain_ == false) ? $user.'@'.$seg[1] : $user.'@'.$domain ;

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM