1 Отредактировано Илья (09.02.2017 16:37:27)

Тема: Маска телефона с помощью preg_replace [Решено]

Добрый день. Делаю вывод телефона с помощью регулярки, но она почему не применяется не поправите?

<td>{$user.phone = preg_replace("#(\d{1})(\d{3})(\d{3})(\d{2})(\d{2})#", "+\\1 (\\2) \\3-\\4-\\5", $user.phone)}
                            {$user.phone}</td>

и так

<td>{$phone = preg_replace("#(\d{1})(\d{3})(\d{3})(\d{2})(\d{2})#", "+\\1 (\\2) \\3-\\4-\\5", $user.phone)}
                            {$phone}</td>

Решение

<td>{preg_replace('#(\d{1})(\d{3})(\d{3})(\d{2})(\d{2})#', '$1 ($2) $3-$4-$5', $user.phone)}</td>

Повысить оценку Понизить оценку

2 Отредактировано Закусило Александр (27.09.2016 17:30:12)

Re: Маска телефона с помощью preg_replace [Решено]

+79*2867**30

<td>{$user.phone = preg_replace("#(\d{1})(\d{3})(\d{3})(\d{2})(\d{2})#", "$1 ($2) $3-$4-$5", $user.phone, -1, null)}
                            {$user.phone}</td>

=> +7 (9*2) 867-**-30

* - это цифра

3

Re: Маска телефона с помощью preg_replace [Решено]

Не работает, я уже по васякому пробовал sad

Повысить оценку Понизить оценку

4 Отредактировано Закусило Александр (27.09.2016 17:33:09)

Re: Маска телефона с помощью preg_replace [Решено]

Илья пишет:

Не работает, я уже по васякому пробовал sad

Работает
https://ru.functions-online.com/preg_replace.html?command={"pattern":"#(\d{1})(\d{3})(\d{3})(\d{2})(\d{2})#","replacement":"$1 ($2) $3-$4-$5","subject":"+79628678430","limit":-1}

Адрес скопировать польностью

5 Отредактировано Илья (27.09.2016 17:42:50)

Re: Маска телефона с помощью preg_replace [Решено]

Выдает ошибку при вставке это в шаблон, получается нужно переделать регулярку?
Fatal error: Only variables can be passed by reference in Z:\home\ready.local\www\core\smarty\sysplugins\smarty_internal_templatebase.php(165) : eval()'d code on line 101

Повысить оценку Понизить оценку

Re: Маска телефона с помощью preg_replace [Решено]

У вас $user чему равен? Выведите.

Re: Маска телефона с помощью preg_replace [Решено]

{$phone = user.phone}
<td>{$phone = preg_replace("#(\d{1})(\d{3})(\d{3})(\d{2})(\d{2})#", "$1 ($2) $3-$4-$5", $phone , -1, null)}
                            {$phone}</td>

8

Re: Маска телефона с помощью preg_replace [Решено]

Тоже самое

Fatal error: Only variables can be passed by reference in Z:\home\ready.local\www\core\smarty\sysplugins\smarty_internal_templatebase.php(151) : eval()'d code on line 102

Повысить оценку Понизить оценку

Re: Маска телефона с помощью preg_replace [Решено]

Тьфу

{$phone = $user.phone}

Re: Маска телефона с помощью preg_replace [Решено]

Помогло?

11

Re: Маска телефона с помощью preg_replace [Решено]

Да я это сразу поправил:) нет не помогло sad

Повысить оценку Понизить оценку

Re: Маска телефона с помощью preg_replace [Решено]

Что у Вас в $user. Выведите через var_dump. Потому, что ругается что неправильно обращаететсь к полю объекта. И весь код шаблона предоставьте. Может у Вас вообще не на это ругается.

13

Re: Маска телефона с помощью preg_replace [Решено]

Я пытаюсь это сделать на странице Печатной формы по ссылке
http://ready.local/admin/shop-orderctrl … =orderform

Вот что выдает var_dump($user)

                            object(Users\Model\Orm\User)#468 (15) {
  ["default_group":protected]=>
  string(5) "guest"
  ["authorized_user_group":protected]=>
  string(7) "clients"
  ["access_menu_table":protected]=>
  string(16) "iazw_access_menu"
  ["access_module_table":protected]=>
  string(18) "iazw_access_module"
  ["cache_cost_id":protected]=>
  NULL
  ["cache_mod_access":protected]=>
  NULL
  ["cache_menu_access":protected]=>
  NULL
  ["cache_admin_menu_access":protected]=>
  NULL
  ["cache_allow_sites":protected]=>
  NULL
  ["groups":protected]=>
  NULL
  ["_values":protected]=>
  array(4) {
    ["surname"]=>
    string(16) "Тестовый"
    ["name"]=>
    string(10) "заказ"
    ["e_mail"]=>
    string(12) "test@mail.ru"
    ["phone"]=>
    string(12) "+79020045678"
  }
  ["_self_class":protected]=>
  string(20) "Users\Model\Orm\User"
  ["_local_id":protected]=>
  int(159)
  ["cache_behavior_instances":"RS\Behavior\AcceptBehavior":private]=>
  array(0) {
  }
  ["instance_behaviors":"RS\Behavior\AcceptBehavior":private]=>
  array(0) {
  }
}

Вот кусок шаблона из orderform.tpl

<div class="bordered">
                <h3>Покупатель</h3>
                <table class="order-table">
                        <tr class="{cycle values=$hl name="user"}">
                            <td class="otitle">
                                Фамилия Имя Отчество:
                            </td>
                            <td>
                                {$user.surname} {$user.name} {$user.midname} {if $user.id}({$user.id}){/if}
                                {if $user.is_company}<div class="company_info">{$user.company}, ИНН: {$user.company_inn}</div>{/if}
                            </td>
                        </tr>
                        <tr class="{cycle values=$hl name="user"}">
                            <td class="otitle">
                                Пол:
                            </td>
                            <td>{$user.__sex->textView()}</td>
                        </tr>
                        <tr class="{cycle values=$hl name="user"}">
                            <td class="otitle">Телефон:</td>
                            {$phone = $user.phone}
                            <td>{$phone = preg_replace("#(\d{1})(\d{3})(\d{3})(\d{2})(\d{2})#", "$1 ($2) $3-$4-$5", $phone , -1, null)}{$phone}</td>
                            
                        </tr>
                        <tr class="{cycle values=$hl name="user"}">
                            <td class="otitle">E-mail:</td>
                            <td>{$user.e_mail}</td>
                        </tr>
                        {foreach from=$user->getUserFields() item=item name=uf}
                        <tr class="{cycle values=$hl name="user"}">
                            <td class="otitle">{$item.title}</td>
                            <td>{$item.current_val}</td>
                        </tr>                
                        {/foreach}
                </table>
            </div>

Повысить оценку Понизить оценку

Re: Маска телефона с помощью preg_replace [Решено]

Ну вроде бы всё правильно. Попробуйте построчно убрать  построчно конструкции, чтобы понять какая строка у Вас неправильная.

15 Отредактировано Илья (30.09.2016 12:21:12)

Re: Маска телефона с помощью preg_replace [Решено]

не понял Вас что имеенно убирать. Уже что только не пробовыл, убирал и изменял, ни как.
Ошибка уходит если убрать -1 но тогда регулярка не применяется

Вот так работает

{$string = '+79020087658'}
{$pattern = '#(\d{1})(\d{3})(\d{3})(\d{2})(\d{2})#'}
{$replacement = '$1 ($2) $3-$4-$5'}
{preg_replace($pattern, $replacement, $string)}

Повысить оценку Понизить оценку

Re: Маска телефона с помощью preg_replace [Решено]

Вот уже ближе к теме. Попробуйте поменять -1 на 1.

17 Отредактировано Илья (30.09.2016 12:32:48)

Re: Маска телефона с помощью preg_replace [Решено]

Вообщем дело было в ("двойных кавычках") нужно было заменить на одинарные, поэтому регулярка не применялась.

А ошибка выдавалась из за , -1, null

И рабочий вариант оказался таким

<td>{preg_replace('#(\d{1})(\d{3})(\d{3})(\d{2})(\d{2})#', '$1 ($2) $3-$4-$5', $user.phone)}</td>

Повысить оценку +1 Понизить оценку

Re: Маска телефона с помощью preg_replace [Решено]

Отлично!