【问题标题】:PHP hide part of stringPHP隐藏部分字符串
【发布时间】:2016-10-23 22:19:53
【问题描述】:

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

例如,用户名应显示为:

tim   will be shown as: t*m

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

【问题讨论】:

  • 这个j**njohn 有效吗?我的意思是,很容易猜到j**n就是john,也许,你应该考虑这种隐藏***n
  • @RomanPerekhrest 你为什么说j**njohn 而不是例如jean?无论如何,用户名通常不是那么简单。
  • @dragoste,因为“John”是更流行的名字,并且匹配j**n的概率更高
  • 但是用户名是唯一的。系统中将只有一个john。还有一个jean。所以它已经是50/50了。任何其他 John 或 Jean 都需要找出其他用户名,所以它有多受欢迎并不重要。

标签: php string replace


【解决方案1】:

你可以使用preg_replace:

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

希望这会有所帮助。

【讨论】:

  • 这正是我要建议的解决方案。
【解决方案2】:

您可以将以下regexpreg_replace 一起使用,如as

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

示例

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

输出:

N******a

正则表达式的解释:

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

Demo

【讨论】:

    【解决方案3】:

    试试:

    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 
    

    【讨论】:

      【解决方案4】:

      例如,您可以这样做:

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

      【讨论】:

        【解决方案5】:
        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;}
        

        【讨论】:

        • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
        猜你喜欢
        • 2013-01-02
        • 2015-11-17
        • 2014-02-24
        • 2021-07-06
        • 2013-01-18
        • 1970-01-01
        • 2022-01-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多