Twig - 替换不区分大小写的字符串

Twig - replace string case insensitive

我想用 twig 替换字符串中的文本以使其变为粗体,这是我的代码:

{{ string|replace({(text): '<span style="font-weight: bold;">'~text~'</span>'})|raw }}

在这个例子中:

string = "Hello world!"
text = "hello"

不会替换单词 'Hello'。我怎样才能让它不区分大小写?

是的,replace 过滤器区分大小写,并且没有更改它的选项。

如果你查看 Twig 的源代码,你会发现 replace 使用 strtr:

// lib/Twig/Extension/Core.php
(...)
new Twig_SimpleFilter('replace', 'strtr'),

如果您不想丢失原来的外壳,可以使用变通方法,例如:

{{ string|lower|replace({(text): '<span style="font-weight: bold;">'~text~'</span>'})|raw }}

参见:http://twigfiddle.com/6ian2b

否则,您可以创建自己的扩展,例如:

$filter = new Twig_SimpleFilter('ireplace', function($input, array $replace) {
  return str_ireplace(array_keys($replace), array_values($replace), $input);
});

我认为此功能可能对整个 Twig 社区都有用,您可以在 GitHub 上打开增强功能。