如何用星号字符屏蔽部分字符串

Posted

技术标签:

【中文标题】如何用星号字符屏蔽部分字符串【英文标题】:How to mask parts of a string with the asterisk character 【发布时间】:2017-10-27 07:16:45 【问题描述】:

我想获取这种格式的电话号码

您的电话号码 ********8898 已发送验证码..

php

【问题讨论】:

str_replace(), substr() 和许多moooooore 你已经尝试了什么? How To Replace Some Characters With Asterisks的可能重复 【参考方案1】:

试试这个

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

【讨论】:

这个答案缺少教育解释。【参考方案2】:

你可以使用 substr :

 $my_text = '12345678';

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

【讨论】:

这不会掩盖任何东西,它会截断。【参考方案3】:
*******echo substr("9876543210", 6, 4);

【讨论】:

【参考方案4】:

如果你想掩盖中间部分:

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 ...

【讨论】:

【参考方案5】:

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

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

如果你还想显示第一个数字:

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

【讨论】:

以上是关于如何用星号字符屏蔽部分字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何用星号分割值并使用正则表达式获取第一个数字[关闭]

在 Pyspark 中屏蔽/替换字符串列的内部

Android - 如何用另一个字符串替换部分字符串?

如何用固定字符串替换部分路径?

JAVA 如何用部分空格分割字符串,急!

如何用模式(正则表达式)替换字符串的一部分在数据框中抛出行