RegEx для сопоставления номеров в Twig - PullRequest
1 голос
/ 05 мая 2019

У меня есть такой маршрут

admin / Applicants / 1111 / view

Я пытаюсь поймать этот маршрут в ветке следующим образом:

{% if route  matches '#admin\/applicants\/\d+\/view#' %}
      route matched
{% else %}
      not matched 
{% endif %}

Должно совпадать, проверено и работает отлично.

Как мне решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 06 мая 2019

Хотя ответ Эммы верен, имейте в виду, что вам нужно будет "экранировать" обратную косую черту перед \d, иначе twig преобразуется в \d в буквальное значение dв исходном коде

{% if route  matches '#admin\/applicants\/\\d+\/view#' %}
      route matched
{% else %}
      not matched 
{% endif %}

{% if route  matches '#admin\/applicants\/\d+\/view#' %}

Скомпилированный исходный код PHP

if (preg_match("#admin/applicants/d+/view#", (isset($context["route"])

Как вы можете видеть, скомпилированный исходный код php преобразуется только в d+.Добавление дополнительной обратной косой черты "решает" эту проблему (см. Строку кода выше)

2 голосов
/ 05 мая 2019

Возможно, вы просто захотите использовать [0-9] вместо \d, и это, вероятно, решит вашу проблему:

Код:

{% set route = 'admin/applicants/1111/view' %}
{% if route  matches '#admin\/applicants\/[0-9]+\/view#' %}
    route matched
{% else %}
    not matched 
{% endif %}

выход

route matched
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...