Как добавить Google reCAPTCHA в HTML-форму
В этой статье мы рассмотрим, как интегрировать Google reCAPTCHA (v2) в HTML-форму обратной связи с клиентской валидацией без использования библиотек jQuery.
Также покажем, как проверить результат на сервере с помощью PHP и curl
. Отправка формы будет осуществляться на 1C-Bitrix, однако данный подход можно легко адаптировать и для других систем.
Это позволит эффективно защитить вашу форму от спама и автоматических отправок.
Шаг 1. Регистрация и получение ключей reCAPTCHA
- Перейдите на Google reCAPTCHA Admin Console.
- Зарегистрируйте новый сайт, выбрав тип reCAPTCHA v2 — «Я не робот» (Checkbox).
- Введите домен вашего сайта.
- Получите два ключа:
- Site key — для вставки в HTML.
- Secret key — для проверки на сервере.
Шаг 2. Пример HTML-формы с reCAPTCHA
1 |
|
1 |
|
Шаг 3. Реализуем валидацию и маску для поля телефона с помощью чистого JavaScript (без jQuery и сторонних библиотек).
Это позволяет ускорить загрузку формы, избежать лишних зависимостей и снизить вес подключаемого кода.
1 |
|
В данном коде реализован модуль formValidationModule
, который отвечает за:
1. Маска поля телефона
- При вводе в поле телефона автоматически форматируется номер в российский формат:
- Удаляются все символы, кроме цифр.
- Если номер начинается с
8
, он преобразуется в7
. - Всегда добавляется префикс
+7
. - Номер форматируется по шаблону:
+7 (999) 999 99-99
.
- Обработчики событий:
input
— форматирует номер в процессе ввода.focus
— при фокусе, если поле пустое, вставляет+7
.blur
— если поле пустое или введён неполный номер, очищает поле.keydown
— разрешает ввод только цифр, клавиш удаления и навигации.
2. Валидация формы на клиенте
- Метод
checkValid(form)
проверяет валидность всех полей формы с помощью встроенного HTML API (checkValidity()
). - Если есть ошибки, вызывает метод
addErrorMessages(invalidFields)
, который отображает сообщения об ошибках рядом с каждым невалидным полем:- Обязательное поле (
valueMissing
) — сообщение “поле обязательно”. - Неверный формат (
typeMismatch
) — сообщение “неверный формат”. - Слишком короткое значение (
tooShort
) — сообщение “слишком короткое значение”.
- Обязательное поле (
- Если форма валидна, возвращает объект
FormData
с данными формы.
3. Отправка формы
- Метод
submitHandler(formId, url)
добавляет обработчик событияsubmit
на форму с указаннымid
. - При отправке:
- Отменяет стандартное поведение браузера.
- Проверяет форму через
checkValid
. - Если данные валидны, отправляет их на сервер с помощью метода
fetch(formId, url, formData)
.
- Метод
fetch
используетfetch API
для POST-запроса к серверу:- Отправляет данные формы.
- Обрабатывает ответ в формате JSON.
- При успешном ответе (код 200) сбрасывает форму.
- Выводит сообщение из ответа в консоль и через
alert
.
4. Очистка сообщений об ошибках
- Метод
cleanErrorMessages(formId)
добавляет обработчик событияinput
на форму. - При изменении любого поля очищает соответствующее сообщение об ошибке.
5. Инициализация модуля
- Метод
init(formId, phoneInputId, url)
запускает:- Обработчик отправки формы.
- Очистку ошибок при вводе.
- Маску для телефона (если передан
phoneInputId
).
Интеграция с Google reCAPTCHA
- Функция
onRecaptchaLoadCallback()
вызывается после загрузки API reCAPTCHA. - Если на странице есть элемент с id
myform-g-recaptcha
, инициализируется виджет reCAPTCHA с указаннымsitekey
. - После этого вызывается инициализация модуля валидации с параметрами:
myform
— id формы.phone
— id поля телефона для маски (если маска не нужна — передатьfalse
)./ajax/form.php
— адрес обработчика на сервере.
Замените
ВАШ_SITE_KEY
на ваш реальный site key из Google.
Шаг 4. Обработка формы на PHP с проверкой полей и reCAPTCHA
Создайте файл по пути /ajax/form.php
с примером кода:
1 |
|
Не забудьте заменить
ВАШ_SECRET_KEY
на ваш секретный ключ.
Краткое пояснение к коду
HTML: подключаем скрипт reCAPTCHA, добавляем виджет с вашим sitekey
.
PHP:
- Получаем данные из
$_POST
. - Получаем ответ в JSON и проверяем поле
success
. - Если проверка не пройдена — выводим ошибку.
- Если всё хорошо — обрабатываем форму (например, отправляем письмо).
Итог
- reCAPTCHA помогает защитить формы от спама.
- Интеграция простая: добавляем виджет в HTML и проверяем ответ на сервере.
- Для проверки используем
curl
и API Google. - Обязательно валидируем данные формы и результат reCAPTCHA.