识别树枝变量中的空白区域

时间:2017-04-05 19:34:51

标签: php symfony twig

我有一种情况,我需要确定树枝模板中的变量是否有空格,并稍微区别对待它。

此应用程序中的名称与给定名称字段中的中间名称一起存储;它们不是分开存放的。

我想要实现的目标是:通常大多数给定的名称都是一个单词,例如: “约翰”或“苏珊”或类似的东西。在某些情况下,我们遇到中间首字母存储在此变量中的情况(例如John J)

遵循标准引用标准,我们需要能够列出这样的项目:

{{ surname }}, {{ given_name }}, 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 %}

有没有办法在树枝内使用正则表达式,还是有另一种方法?

提前致谢

4 个答案:

答案 0 :(得分: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%}

我建议你在函数或宏中填充这个逻辑。

您可以在this working example

中尝试一下

答案 1 :(得分:1)

这是可能的,但不一定能很好地处理边缘情况。假设你需要在树枝上做整件事,你可以这样做:

{% 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

答案 2 :(得分:1)

您可以使用matches comparison operator的正则表达式,如果given_name与模式匹配,则添加点。

{{ given_name }}{% if given_name matches '/^.+ .$/' %}.{% endif %}

答案 3 :(得分: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] }}指定数组的第一个元素。如果nameArray 1包含任何内容,则定义它。

Here is a working twigfiddle向您展示它有效。