PHP 隐藏部分字符串

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

我正在寻找 PHP 中隐藏字符串(例如用户名)的最优雅的方法。

例如,用户名应显示为:

tim   will be shown as: t*m

所以用户名本身并不完全“神秘”,但没有人可以猜出他们的登录名,或者至少不能确定。

php string replace
6个回答
9
投票

您可以使用preg_replace

$string = 'usernameTest';
echo preg_replace("/(?!^).(?!$)/", "*", $string); // u**********t
  • (?!^) 检查该字符是否不是字符串中的第一个字符。
  • 。匹配任何字符
  • (?!$) 检查该字符是否不是字符串中的最后一个字符。

希望这有帮助。


4
投票

您可以使用以下

regex
以及
preg_replace
函数,如 as

(^.|.$)(*SKIP)(*F)|(.)

示例

$your_string = "Narendra";
echo preg_replace("/(^.|.$)(*SKIP)(*F)|(.)/","*",$your_string);

输出:

N******a

正则表达式解释:

  • (^.|.$)
    这将捕获单词的第一个和最后一个字母
  • (*SKIP)(*F)
    这将跳过上面捕获的单词
  • |(.)
    在这里,其余的字母将被捕获,并可以进一步替换为您的角色,即
    *
    在这里

演示


1
投票

尝试:

function get_starred($str) {
    $len = strlen($str);
    return substr($str, 0, 1).str_repeat('*', $len - 2).substr($str, $len - 1, 1);
}


$myStr = 'YourName';
echo get_starred($myStr); //should show Y******e 

0
投票

您可以这样做,例如:

<?php
function HideUN($username = "") {
    $replaced = "";

    # Count the characters in username and remove an extra asterik (*)
    # Substring, remove all characters and leave the first one and add the last one
    for($i = 0; $i < strlen($username) -1; $i++) $replaced .= "*";

    return substr($username, 0, 1)."".$replaced."".substr($username, -1, 1);
}
# Call this function
$string = "John";
echo HideUN($string);
?>

substr()
删除第一个字符之后的所有字符,然后
for()
循环,计算
$string
中的字符,然后我们将星号(*)添加到另一个名为
$replaced
的变量中。

最后我们将它们放在一起形成呼应。输出:

J***n


0
投票
function Split_Hide_Name($name) {
$name = trim($name);
$split_name = explode(' ',$name);
foreach($split_name as $v) {
   $string []= strlen($v);
}
$number_of_letters_to_show = 3;
$first_name_length = $string[0];
$last_name_length = $string[count($string)-1];

$first_name1 = $split_name[0];
$last_name1 = $split_name[count($string)-1];

$fname_cover = '';
for ($i = 0; $i < $first_name_length - $number_of_letters_to_show; $i++){
$fname_cover .="*";
}

$lname_cover = '';
for ($i = 0; $i < $last_name_length - $number_of_letters_to_show; $i++){
$lname_cover .="*";
}

$first_name = substr_replace($first_name1,$fname_cover,$number_of_letters_to_show);
$last_name = substr_replace($last_name1,$lname_cover,$number_of_letters_to_show);

return $first_name.' '.$last_name;}

0
投票

尝试使用substr_replace函数

<?php echo substr_replace('tim','...',1,-1);?>

其中 1 和 -1 表示字符串两边都应该可见的字符数

© www.soinside.com 2019 - 2024. All rights reserved.