将字符串中除最后四个字符之外的所有字符替换为星号

问题描述 投票:0回答:7

我想使用星号屏蔽电话号码的前导数字。

这样消息可以呈现为:

Your phone number ********8898 has been sent with a verification code.
php string phone-number data-masking redaction
7个回答
16
投票

如果你想遮盖中间部分:

private function stringToSecret(string $string = NULL)
{
    if (!$string) {
        return NULL;
    }
    $length = strlen($string);
    $visibleCount = (int) round($length / 4);
    $hiddenCount = $length - ($visibleCount * 2);
    return substr($string, 0, $visibleCount) . str_repeat('*', $hiddenCount) . substr($string, ($visibleCount * -1), $visibleCount);
}

结果:

  • 1 => 1
  • 12 => 12
  • 123 => 1*3
  • 1234 => 1**4
  • 12345 => 1***5
  • 123456 => 12**56
  • 1234567 => 12***67
  • 12345678 => 12****78
  • ...

7
投票

如果电话号码长度超过4,那么你可以这样做:

substr_replace($number, str_repeat('*', strlen($number)-4), 0, -4);

如果您还想显示第一位数字:

substr_replace($number, str_repeat('*', strlen($number)-5), 1, -4);

3
投票

试试这个

$phone_number = '******' . substr( $phone_number, - 4);
echo $phone_number;

0
投票

$email_new = $email_new[0].$email_new[1].$email_new[2].$email_new[3].'******' 。 substr( $email_new, - 7);


0
投票

使用

preg_replace()
将允许您编辑未知长度字符串中除最后四个字符之外的所有字符。这适合作为各种值(如电话号码、信用卡号、社会保障号等)的实用函数。匹配后面至少有 4 个字符的任何字符,并将其替换为
*
编辑电子邮件地址的一部分可能会有点复杂。

代码:(演示

$phone = '040783248898';    
echo preg_replace('/.(?=.{4})/', '*', $phone);
// ********8898

-3
投票

你可以使用 substr :

 $my_text = '12345678';

echo substr($my_text, 1);  // 2345678

-3
投票
*******echo substr("9876543210", 6, 4);
© www.soinside.com 2019 - 2024. All rights reserved.