识别twig变量中的空白符

3

我有一个情况需要在twig模板中判断变量中是否存在空格,并对其进行略微不同的处理。

该应用程序中的姓名在名字字段中存储有中间名缩写,而不是单独存储。

我的目标是:通常大多数名字都是单词,例如“约翰”或“苏珊”等。在某些情况下,我们将中间名缩写存储在此变量中(例如,约翰J)。

按照标准引用规范,我们需要能够列出这样的项目:

{{ surname }}, {{ given_name }}, ed.

这样它看起来像“Smith,John,ed。”这通常是可以的,但在一些情况下,如果有一个中间名字,它会显示为“Smith,John J,ed。”- 这是不正确的。我不能在名字后面加上一个句号,因为“Smith,John。,ed”将是一个不正确的引用标准。
我的目标是识别given_name是否包含一个空格,然后是一个单独的字母,然后以不同的格式进行格式化。
类似于这样:
{% if given_name [has a blank space preceding a single letter] %}
{{ given_name }}., ed.
{% else %}
{{ given_name }}, ed.
{% endif %}

有没有一种在twig中使用正则表达式来实现这个的方法,或者还有其他的方法?
提前感谢。

你有没有考虑编写一个自定义的Twig扩展来为你完成所有这些工作? - BentCoder
{{ given_name|split(' ')[0] }} 将删除第一个空格后的所有内容,因此 John J Hello 变成了 John - BentCoder
我更新了我的回答。抱歉我之前太快给你一个简单的答案,我以为你能从我的原始解决方案中找到答案。 - Alvin Bunk
4个回答

2
我们可以翻译您的需求:

在单个字母前有一个空格

在这个小算法中:
{% set given_name = 'John J' %}

{% set given_name_elems = given_name|split(' ') %}

{% set size = given_name_elems|length %}


{% if size >0 and given_name_elems[size-1]|length == 1%}
   { given_name }}., ed.
{%else%}
   {{ given_name }}, ed.
{%endif%}

我建议您将这个逻辑封装在一个函数或宏中。
您可以在这个实例中尝试一下。

1
谢谢,这解决了问题;只需要稍微调整一下就能让它在我的实际情况下工作。感谢您指引我正确的方向 :) - nomistic

1
你可以使用正则表达式和 matches 比较运算符,如果 given_name 符合模式,则添加点号。
{{ given_name }}{% if given_name matches '/^.+ .$/' %}.{% endif %}

1
这是可能的,但不一定能很好地处理边缘情况。假设你需要在twig中完成整个任务,你可以像这样做:
{% set nameArray = given_name | split(' ') %}
{% set first_name = nameArray[0] %}
{% set middle_initial = nameArray[1] is defined ? " "~nameArray[1]~"." : ""%}

此时,`middle_initial` 现在设置为空字符串或带有句点的中间名,因此您可以输出完整姓名,如下所示:
{{ surname }}, {{first_name ~ middle_initial}}, ed

这是一个不错的解决方案! - Alvin Bunk

0

抱歉,我一开始没有给你一个好的答案。我已经更新了我的代码和twigfiddle。它比@Matteo的代码简单一些:

{% set given_name = 'John J' %}
{% set nameArray = given_name|split(' ') %}

{% if nameArray[1] is defined %}
    {{ nameArray[0] }} {{ nameArray[1] }}., ed.
{% else %}
    {{ nameArray[0] }}, ed.
{% endif %}

{{ nameArray[0] }} 指定了数组的第一个元素。如果 nameArray1 包含任何内容,则已定义。

这里有一个工作的 twigfiddle,可以向您展示它是如何工作的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接