@strify_25

Как сделать валидацию телефона при оформлении заказа в битриксе?

Добавил маску ввода телефона, она работает корректно. Но если пользователь введет телефон не полностью, так и останется, например, +7 (920) 333-__-__
Пробую в свойствах заказа в админке ввести регулярное выражение для проверки
/^[+][0-9] [(][0-9]{3}[)] [0-9]{3}[-][0-9]{2}[-][0-9]{2}$/


но появляется сообщение "Свойство заказа "Телефон" - не соответствует шаблону", хотя введенное значение +7 (999) 999-99-99 полностью соответствует регулярному выражению
  • Вопрос задан
  • 3109 просмотров
Решения вопроса 1
winer
@winer
занимаюсь разработкой сайтов на 1c-bitrix
Если маску делали с помощью InputMask, то на фронте можно добавить валидацию поля ПЕРЕД сохранение заказа

if ($(selector).inputmask("isComplete")){
    //do something
}


Можно к этой валидации добавить серверную валидацию поля на событии модуля sale OnSaleOrderBeforeSaved
Приблизительно так может выглядеть обработчик:
<?
function OnSaleOrderBeforeSaved(\Bitrix\Main\Event $event)
{
    /** @var \Bitrix\Sale\Order $order */
    $order = $event->getParameter("ENTITY");

    if ($order->isNew() ) {//Если проверка требуется только для нового заказа, а не при его редактировании
        $propertyCollection = $order->getPropertyCollection();
        $phoneProperty = $propertyCollection->getPhone();
        $isPhoneValid = validatePhone($phoneProperty);

        if (!$isPhoneValid) {
            $event->addResult(new \Bitrix\Main\EventResult(
                \Bitrix\Main\EventResult::ERROR,
                new \Bitrix\Sale\ResultError('Текст ошибки', 'PHONE_PROPERTY_INVALID')
            ));
        }

    }
}


надо только реализовать метод/функцию validatePhone, которая валидирует телефон так как Вам надо
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы