【问题标题】:Is there a way I can replace part of a string in twig?有没有办法可以替换树枝中的部分字符串?
【发布时间】:2020-04-09 21:13:09
【问题描述】:

我希望能够用星号字符替换字符串的中间部分。有什么办法可以在树枝上做吗?

例如;

如果我有

afashaisakiye@gmail.com

我想退货

afa********@gmail.com

如果我有

+256 700033333

我想退货

+2567********33

【问题讨论】:

  • 你想直接在你的树枝视图中还是在你的 php 控制器中进行操作?
  • 您可以使用过滤器slice 或编写自己的过滤器并将其添加到树枝
  • @PierrickRambaud 在我的树枝上最好
  • 您的系统是否允许使用一次性电子邮件?
  • 您的电子邮件的星号版本比字符串中的字符少两个星号,这是拼写错误还是您能解释一下逻辑吗?

标签: php twig slim


【解决方案1】:

您可以使用任何您想要的 PHP 逻辑扩展 twig,例如

use Slim\Views\Twig;
use Slim\Views\TwigExtension;


$container['view'] = function ($container){
    $twig = new Twig(__DIR__.'/../resources/views');

    $twig->addFilter(new Twig_SimpleFilter('obfuscate', function($value, $char = '*', $visible = 4) {
        if ($visible % 2 != 0) $visible++;
        if (strlen($value) <= $visible) return str_repeat($char, strlen($value));
        return substr($value, 0, floor($visible) / 2).str_repeat($char, strlen($value) - $visible).substr($value, -1 * (floor($visible) / 2));
    }),

    return $twig;
};

{{ 'john.doe@gmail.com' | obfuscate }} {# output: jo**************om  #}
{{ 'john.doe@gmail.com' | obfuscate('-', 10) }} {# output: john.--------l.com   #}
{{ '123456' | obfuscate }} {# output: 12**56  #}
{{ '123' | obfuscate }} {# output: *** #}
{{ '1' | obfuscate }} {# output: * #}
{{ '+32497123456' | obfuscate }} {# output: +3********56 #}

【讨论】:

    【解决方案2】:

    试试这个代码:

    $email = 'afashaisakiye@gmail.com';
    $test = explode('@', $email);
    echo str_pad(substr($test[0], 0, 3),strlen($test[0]),"*").'@'.$test[1];
    
    $number = '+256 700033333';
    $number = str_replace(' ', '', $number);
    echo str_pad(substr($number, 0, 5),strlen($number)-3,"*").substr($number, -3);
    

    【讨论】:

    • 我可以在树枝上做吗?是自己?
    • 可以,但我对 twig 了解不多。
    猜你喜欢
    • 2019-06-28
    • 2020-07-29
    • 2022-06-12
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多