Настройка валидации полей форм 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка валидации полей форм 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1181
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    813
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка валидации полей форм 1С-Битрикс

Форма принимает номер телефона в любом формате: «80291234567», «+375-29-123-45-67», «029 123 45 67» — всё это попадает в базу как есть. Через три месяца менеджер смотрит на 2000 записей с номерами в десяти разных форматах и не может выгрузить их в CRM.

Встроенная валидация модуля form

Модуль form поддерживает базовую валидацию на уровне полей через параметры в b_form_field: поле REQUIRED (Y/N), поле CHECK_FILTER — регулярное выражение для проверки значения, поле FILTER_MEMO — сообщение об ошибке.

Редактирование через API:

\CFormField::Update($fieldId, $formId, [
    'REQUIRED'     => 'Y',
    'CHECK_FILTER' => '^\\+375[0-9]{9}$',
    'FILTER_MEMO'  => 'Введите номер в формате +375XXXXXXXXX',
]);

CHECK_FILTER проверяется на сервере при сохранении результата. Клиентская валидация встроенным модулем не поддерживается — только серверная.

Клиентская валидация через JavaScript

Для немедленной обратной связи клиентская валидация добавляется в шаблон компонента bitrix:form.result.new. Обработчик подписывается на событие submit формы:

document.getElementById('form_<?= $arResult['FORM']['SID'] ?>').addEventListener('submit', function (e) {
    var errors = [];

    // Телефон
    var phone = document.getElementById('field_PHONE').value.replace(/\D/g, '');
    if (!/^375\d{9}$/.test(phone)) {
        errors.push('Телефон: введите номер в формате +375XXXXXXXXX');
        document.getElementById('field_PHONE').classList.add('error');
    }

    // Email
    var email = document.getElementById('field_EMAIL').value;
    if (email && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
        errors.push('Email: неверный формат адреса');
        document.getElementById('field_EMAIL').classList.add('error');
    }

    if (errors.length > 0) {
        e.preventDefault();
        document.getElementById('form_errors').innerHTML = errors.join('<br>');
    }
});

Нормализация перед сохранением

Валидация без нормализации половинчатое решение. Телефон нужно не только проверить, но и привести к единому виду. Обработчик события OnBeforeResultAdd:

AddEventHandler('form', 'OnBeforeResultAdd', function($formId, &$arFields) {
    if (isset($arFields['form_field_PHONE'])) {
        $phone = preg_replace('/\D/', '', $arFields['form_field_PHONE']);

        // Нормализовать: 80291234567 → 375291234567
        if (strlen($phone) === 11 && $phone[0] === '8') {
            $phone = '375' . substr($phone, 2);
        }
        if (strlen($phone) === 9) {
            $phone = '375' . $phone;
        }

        if (strlen($phone) === 12 && str_starts_with($phone, '375')) {
            $arFields['form_field_PHONE'] = '+' . $phone;
        } else {
            // Вернуть ошибку
            global $APPLICATION;
            $APPLICATION->ThrowException('Неверный формат телефона');
            return false;
        }
    }
});

Валидация с помощью маски ввода

Маска ввода предотвращает некорректный формат ещё во время набора. Библиотека IMask.js интегрируется в шаблон компонента:

IMask(document.getElementById('field_PHONE'), {
    mask: '+{375} (00) 000-00-00',
});

После маски пользователь физически не может ввести букву в поле телефона. Это снимает часть нагрузки с серверной валидации, но не заменяет её — данные могут прийти через прямой POST-запрос минуя форму.

Защита от спама

Стандартная CAPTCHA Битрикса подключается через параметр компонента USE_CAPTCHA. Для Web-форм — поле типа captcha в b_form_field. Альтернатива — Google reCAPTCHA v3 через обработчик OnBeforeResultAdd: при низком скоре рекапчи форма отклоняется без показа ошибки пользователю (honeypot-подход для ботов).

Серверная проверка reCAPTCHA v3:

$token = $_POST['g-recaptcha-response'];
$response = file_get_contents(
    'https://www.google.com/recaptcha/api/siteverify?secret=SECRET&response=' . $token
);
$data = json_decode($response, true);
if ($data['score'] < 0.5) {
    return false; // Молча отклонить
}