PHP Pregreplace замена pattern

249
19 декабря 2017, 19:16

Здравствуйте. Есть регулярка для замены bbcode-смайла:

return preg_replace('#\[smile\](\d+)\[/smile\]#', 
'<img src="https://site.com/assets/img/smiles/$1.gif?2" class="smileicon">', 
 $text);

Но проблема в том, что смайлов всего - 36. А если ввести [smile]37[/smile] то выведется пустая 404 картинка. Не подскажите как можно это исправить?

Answer 1

Можно рассмотреть пару вариантов.

Первый - использовать preg_replace_callback, с проверкой допустимости числового значения. Примерно так:

$data = [ "[smile]36[/smile]", "[smile]37[/smile]"];

foreach($data as $text){
    $out =  preg_replace_callback('#\[smile\](\d+)\[/smile\]#',.
                function($matches){
                    if($matches[1] < 37){
                        return '<img src="https://site.com/assets/img/smiles/'.$matches[1].'.gif?2" class="smileicon">';
                    }
                    return $matches[0];
                }, $text);
    print_r($out);
}

второй - составить регулярку, которая будет соответствовать только диапазону 1-36, какую нить а-ля

#\[smile\]([1-9]|[12]\d|3[0-6])\[\/smile\]#
Answer 2

Если имеенно регуляркой

#\[smile\]([012]\d|3[0-6])\[/smile\]#

можно попробовать тут :)

READ ALSO
Как изменить переменную в php-файле

Как изменить переменную в php-файле

Есть php-файл примерно с таким содержимым

175
Как добавить условия проверки на &ldquo;битые ссылки&rdquo; с использованием cURL?

Как добавить условия проверки на “битые ссылки” с использованием cURL?

Добрый день! Подскажите пожалуйста, поставил плагин проверки "битых ссылок", но необходимо его расширить, добавить пару url-адресов для проверки...

159
Найти и заменить с условием

Найти и заменить с условием

WP Данные из текстового поля попадают в переменную the_contentНужна функция, которая будет пробегаться по тексту, выискивать таблицы, не заключенные...

158
React + Laravel скачивание файлов

React + Laravel скачивание файлов

Есть АПИ на Laravel, я использую библиотеку Laravel-Excel что бы сгенерировать xls файл, как его правильно отдать клиенту и как сделать на реакте скачивание...

141