Налаштування валідації полів форм 1С-Бітрікс
Ми стикаємося з цим постійно. Клієнти приходять з уже готовим каталогом контактів, де кожен менеджер вводив дані як хотів. І в підсумку — жодне автоматичне вивантаження не працює. Рішення — налаштування валідації ще на етапі заповнення форми. Тут ми покажемо, як навести лад у даних за допомогою інструментів 1С-Бітрікс: від маски введення до серверних обробників. Наш досвід — більше 50 проєктів з налаштування валідації, і кожна робота виконується під ключ з гарантією результату.
Форма приймає номер телефону в будь-якому форматі: «80291234567», «+375-29-123-45-67», «029 123 45 67» — все це потрапляє в базу як є. Через три місяці менеджер дивиться на 2000 записів з номерами в десяти різних форматах і не може вивантажити їх у CRM. Якби валідація була налаштована заздалегідь, дані прийшли б уже нормалізованими. Розберемо інструменти, які це забезпечують.
Чому стандартної валідації недостатньо?
Вбудовані засоби 1С-Бітрікс дають базову перевірку, але не вирішують усіх проблем. Вони не дозволяють гнучко реагувати на нестандартні формати, не вміють нормалізувати дані та не захищають від ботів. Для повноцінної роботи доводиться комбінувати кілька підходів: від масок до серверних обробників. Згідно з документацією 1С-Бітрікс, подія OnBeforeResultAdd — основна точка для серверної валідації.
Вбудована валідація модуля 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 перевіряється на сервері при збереженні результату. Клієнтська валідація вбудованим модулем не підтримується — тільки серверна.
Порівняння підходів до валідації
| Метод | Де виконується | Час відгуку | Захист від прямих POST | Відсоток помилкових записів |
|---|---|---|---|---|
| Маска введення | Клієнт | Миттєво | Ні | <5 % |
| JavaScript-валідація | Клієнт | <100 мс | Ні | <10 % |
| Серверна валідація | Сервер | 500–1000 мс | Так | <1 % |
| reCAPTCHA | Сервер | 200–500 мс | Так (боти) | - |
Маска введення виявляє помилки в 5 разів швидше, ніж серверна перевірка після відправлення. Однак тільки серверна валідація гарантує захист від прямих POST-запитів.
Клієнтська валідація через 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; // Мовчки відхилити } На одному з проєктів для мережі магазинів ми налаштували валідацію контактної форми з 8 полями. Після впровадження кількість помилкових записів знизилася з 30% до 1%, а кількість спам-заявок упала на 95% завдяки reCAPTCHA v3.
Як ми налаштовуємо валідацію під ключ?
Наші спеціалісти з понад 10-річним досвідом роботи з 1С-Бітрікс проводять повний аналіз форми, розробляють регулярні вирази та маски, налаштовують серверні обробники та захист від спаму. Все тестується на реальних сценаріях. Після завершення ви отримуєте документацію та інструкцію для адміністратора. Ми гарантуємо, що дані надходитимуть в єдиному форматі, а помилкові записи зведуться до мінімуму.
Що входить в роботу
- Аналіз поточних полів та вимог до даних
- Розробка регулярних виразів та масок для кожного поля
- Налаштування клієнтської валідації (JavaScript)
- Написання серверних обробників нормалізації
- Інтеграція reCAPTCHA v3 або іншого антиспаму
- Тестування на граничні значення та прямі POST-запити
- Надання документації та навчання адміністраторів
Скільки часу займає налаштування?
Терміни залежать від кількості полів та складності логіки. В середньому налаштування одного поля займає від 2 годин, комплексна валідація форми (до 10 полів) — від 2 до 5 днів. Оцінка проєкту виконується безкоштовно. Зв'яжіться з нами — обговоримо деталі та підберемо найкраще рішення для вашого бізнесу.







