preg_replace в формате даты вывода - PullRequest
0 голосов
/ 10 июля 2020

Я хочу заменить переменные в тексте, чтобы пользователь мог установить собственный формат даты.

В простейшем примере они могут это сделать ....

$text = 'The date today is {{current_date|Y-m-d}} isnt it';

$text = preg_replace('/{{current_date\|(.*)}}/', date("$1"), $text);

echo $text;

Но это возвращает ...

The date today is Y-m-d isnt it

Но я хочу, чтобы он вернул ....

The date today is 2020-07-10 isnt it

Итак, дата не форматируется. Есть идеи, что я делаю не так?

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Сохраненный формат даты не будет передан в функцию date. Он будет доступен только для интерполяции в заменяемую строку. Вместо этого вы захотите использовать preg_replace_callback:

$text = preg_replace_callback('/{{current_date\|(.*)}}/', function($match) {
    return date($match[1]); 
}, $text);

Это позволяет вам передать захваченную строку в функцию для дальнейшей обработки.

0 голосов
/ 10 июля 2020

Если это PHP версия <= 5.6, приведенный ниже код будет работать. Более поздняя версия <code>/e лишена

$text = 'The date today is {{current_date|Y-m-d}} isnt it';
$text = preg_replace('/{{current_date\|(.*)}}/e', 'date("$1")', $text);
echo $text;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...