PHP 只保留字串首尾字元/隱藏部分字串

①. 隱藏部分字串

Thank you for reading this post, don't forget to subscribe!

隱藏部分字串, 此方法多用於手機號碼或身份證號、銀行卡號的中間部分數字的隱藏

/**
* 隱藏部分字串
* # 此方法多用於手機號碼或身份證號、銀行卡號的中間部分數字的隱藏
*/
function func_substr_replace($str, $replacement = '*', $start = 1, $length = 3)
{
    $len = mb_strlen($str,'utf-8');
    if ($len > intval($start+$length)) {
        $str1 = mb_substr($str,0,$start,'utf-8');
        $str2 = mb_substr($str,intval($start+$length),NULL,'utf-8');
    } else {
        $str1 = mb_substr($str,0,1,'utf-8');
        $str2 = mb_substr($str,$len-1,1,'utf-8');
        $length = $len - 2;
    }
    $new_str = $str1;
    for ($i = 0; $i < $length; $i++) {
        $new_str .= $replacement;
    }
    $new_str .= $str2;
    return $new_str;
}

②. 隱藏部分字串

只保留字串首尾字元,隱藏中間用*代替(兩個字元時只顯示第一個)

/**
 * 只保留字串首尾字元,隱藏中間用*代替(兩個字元時只顯示第一個)
 * @param string $user_name 姓名
 * @return string 格式化後的姓名
 */
function substr_cut($user_name){
    $strlen     = mb_strlen($user_name, 'utf-8');
    $firstStr     = mb_substr($user_name, 0, 1, 'utf-8');
    $lastStr     = mb_substr($user_name, -1, 1, 'utf-8');
    return $strlen == 2 ? $firstStr . str_repeat('*', mb_strlen($user_name, 'utf-8') - 1) : $firstStr . str_repeat("*", $strlen - 2) . $lastStr;
}