Правильно настроенные поля и валидация избавляют от мусорных заявок и ошибок в данных. Разберём, как в 1С-Битрикс задать типы вопросов, сделать поля обязательными и проверять ответы — от простых фильтров до регулярных выражений и событий.
Где настраиваются поля формы
Управление полями веб-формы выполняется в административном разделе. Каждое поле в терминологии модуля называется вопросом, а варианты ответа на него — ответами.
- Перейдите в Сервисы → Веб-формы → Настройка форм.
- Наведите курсор на нужную форму и выберите Изменить.
- Откройте вкладку Вопросы — здесь список всех полей формы.
- Нажмите Добавить вопрос или откройте существующий для редактирования.
Для каждого вопроса задаются символьный код (SID), заголовок, тип поля, сортировка, признаки обязательности и активности. Символьный код используется в шаблоне формы и в фильтрах, поэтому давайте полям осмысленные латинские коды, например EMAIL, PHONE, MESSAGE.
Типы полей (вопросов)
Тип поля определяет, каким элементом управления вопрос отображается на странице и как хранится ответ. Модуль «Веб-формы» поддерживает следующие типы:
| Тип | Элемент на форме | Когда применять |
|---|---|---|
| text | Однострочное поле | Имя, e-mail, телефон, короткий ответ |
| textarea | Многострочное поле | Комментарий, сообщение, описание |
| radio | Переключатели | Выбор одного варианта из нескольких |
| checkbox | Флажки | Выбор нескольких вариантов, согласие с условиями |
| dropdown | Выпадающий список | Выбор одного значения из длинного списка |
| multiselect | Список с множественным выбором | Несколько значений из списка |
| date | Поле с календарём | Дата события, желаемая дата звонка |
| image / file | Загрузка файла | Приложить фото, документ, резюме |
| password | Скрытый ввод | Ввод чувствительных данных |
Для типов radio, checkbox, dropdown и multiselect варианты ответа задаются на той же странице в блоке Ответы: значение, подпись и сортировка. Один из вариантов можно пометить как выбранный по умолчанию.
Обязательные поля и значения по умолчанию
Чтобы посетитель не смог отправить форму без ключевых данных, отметьте вопрос как обязательный.
- Обязательный — установите флажок Обязателен. Пустое поле блокирует отправку, а рядом выводится сообщение об ошибке.
- Значение по умолчанию — для текстовых полей можно задать предзаполненный текст, для списков — выбрать вариант, помеченный как активный по умолчанию.
- Активность — снятый флажок Активен скрывает поле с формы, не удаляя его настройки и накопленные ответы.
- Сортировка — числовое поле определяет порядок вывода вопросов; меньшее значение — выше.
Обязательность проверяется на стороне сервера при отправке формы, поэтому её нельзя обойти, отключив JavaScript. Дополнительно шаблон компонента bitrix:form может подсвечивать обязательные поля звёздочкой.
Валидация через фильтр значения
Для каждого вопроса доступно поле Фильтр значения (регулярное выражение в формате PCRE). Если ответ не соответствует шаблону, форма не отправится и покажет ошибку.
Примеры распространённых фильтров:
- E-mail:
/^[^@\s]+@[^@\s]+\.[^@\s]+$/ - Телефон (цифры, плюс, скобки, дефисы, пробелы):
/^[\d\+\(\)\-\s]{7,20}$/ - Только буквы кириллицы:
/^[а-яёА-ЯЁ\s\-]+$/u - Индекс из 6 цифр:
/^\d{6}$/
Регулярное выражение указывается вместе с ограничителями и модификаторами. Модификатор u нужен для корректной работы с кириллицей в UTF-8. Оставьте поле пустым, если проверка формата не требуется.
Ограничение длины
Для текстовых полей задайте максимальное количество символов через фильтр или в шаблоне через атрибут maxlength. Серверную проверку длины удобнее реализовать тем же регулярным выражением, например /^.{1,500}$/s.
Сложная валидация через события модуля
Когда фильтра-регулярки недостаточно (например, нужно сверить два поля между собой или обратиться к базе), используйте событие модуля form. Обработчик регистрируется в файле /local/php_interface/init.php.
Для проверки перед сохранением результата подходит событие onBeforeResultAdd. Обработчик получает данные полей, а вернув сообщение об ошибке, отменяет отправку формы:
AddEventHandler("form", "onBeforeResultAdd", "MyFormCheck")— регистрация обработчика.- Внутри функции анализируйте массив значений и при ошибке вызовите
\$GLOBALS["APPLICATION"]->ThrowException("Текст ошибки")и вернитеfalse. - Так проверяют согласие с обработкой персональных данных, совпадение паролей, уникальность e-mail и любые бизнес-правила.
Событие срабатывает на сервере для всех форм, поэтому внутри обработчика проверяйте WEB_FORM_ID, чтобы применять правила только к нужной форме.
Частые ошибки
- Регулярка без ограничителей. Фильтр значения должен начинаться и заканчиваться разделителем (
/.../). Без них выражение не сработает или вызовет ошибку PCRE. - Забыт модификатор
u. Для кириллицы в UTF-8 без него символы обрабатываются побайтово и валидация ломается. - Проверка только на JavaScript. Клиентская проверка обходится отключением JS. Обязательные поля и форматы дублируйте серверной валидацией (фильтр или событие).
- Изменён символьный код после запуска. Смена
SIDвопроса рвёт связь с шаблоном формы и с уже накопленными результатами. Задавайте код один раз при создании. - Слишком строгий фильтр телефона. Жёсткий шаблон вроде
/^\d{11}$/отсекает номера с плюсом, скобками и пробелами. Разрешайте служебные символы. - Обязательный checkbox согласия без проверки. Флажок обязательности не всегда учитывает снятый checkbox — контролируйте согласие через событие
onBeforeResultAdd.
Итог
Настройка полей веб-формы в 1С-Битрикс строится вокруг вкладки Вопросы: выбирайте подходящий тип поля, отмечайте обязательные вопросы и задавайте осмысленные символьные коды. Форматную проверку закрывайте фильтром значения (регулярным выражением с модификатором u для кириллицы), а сложные бизнес-правила — обработчиком события onBeforeResultAdd.
Главное правило: любая клиентская проверка должна дублироваться на сервере. Тогда форма собирает чистые данные без мусорных и некорректных заявок.