Налаштування валідації полів форм 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування валідації полів форм 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Настройка валідації полів форм 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; // Мовчки відхилити
}