Блог

Регулярные выражения. Smarty

Модификатор переменной regex_replace - поиск и замена при помощи регулярного выражения. Используется синтаксис функции PHP preg_replace().

Получить название файла с расширением из ссылки (url)

{$doc = "/wa-data/public/site/pages/7/advancedparams/price_160216.docx"}
{$doc|regex_replace:'/(.+\/([^\/]+)$)/':'$2'}

{* Результат *}
price_160216.docx

Убрать символы тире и скобки. Оставить только цифры телефона

Можно использовать для ссылки вызова номера телефона на мобильных устройствах.
Например <a href="tel:+70000000000">+7 (000) 000-0000</a>

{$phone = "+7 (000) 000-0000"}
{$phone|strip:''|regex_replace:"/[-\)\(\+]/":""}
 
{* Результат *}
+70000000000

Получить название домена из url

{$domainUrl = "https://www.domain.ru/"}
{$domainUrl|regex_replace:"/^(https?:)?(\/\/)?(www\.)?/":""}

{* Результат *}
domain.ru

{* Другие варианты *}
{$domainUrl|regex_replace:'/\..+$/u':''}
{$domainUrl|regex_replace:'/\.[^.]*?$/':''}
{$domainUrl|regex_replace:"/https?:\/\/(?:[-\w]+\.)?([-\w]+)\.\w+(?:\.\w+)?\/?.*/i":"$1"}

Стилизация радио кнопок

Чтобы стилизовать стандартные radio input требуется "правильная" разметка html. Встречаются случаи когда нельзя изменить шаблон переменной. Применение регулярных выражений может спасти ситуацию

{$checkout_contact_form->html()|regex_replace:'/(<input type="radio" [^="">]+>?)/i':'$1 <span class="icon-radio"></span>'|replace:'<label>':'<label class="custom-radio">'}

{* Было *}
<label>
    <input type="radio" checked="checked" name="customer[sposob-dostavki]" value="Самовывоз"> 
    Самовывоз
</label>

{* Стало *}
<label class="custom-radio">
    <input type="radio" checked="checked" name="customer[sposob-dostavki]" value="Самовывоз"> 
    <span class="icon-radio"></span> 
    Самовывоз
</label>

Удаляем комментарии

{* Любые комментарии *}
{$code|regex_replace:'/((?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:\/\/.*))/':''}

{* Комментарии в строку 
/* text */ 
*}
{$code|regex_replace:'!/\*.*?\*/!s':''}

{* Многострочные комментарии
/***
some
text
*****/ 
*}
{$code|regex_replace:'/\n\s*\n/':'\n'}
Иван

Иван

15 марта 2019

Теги: htmlsmartyregex_replace
Просмотры: 1558