Как ограничить минимальное количество символов для телефон номера в Contact form7?

Ссылка скопирована
1 ответ

[tel* tel-230 "+998" number min:6?] не работает.

Дополнительно:

Ответы:

Потому что надо указывать minlength:6

  • так это для текста, не?
  • killmeslow, попробуй всё же заглянуть в документацию https://contactform7.com/text-fields/#tel
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Игорь NetOps Ответ

В Contact Form 7 для телефонного поля нужно использовать параметры, которые поддерживает сам тег формы. number min:6 здесь не подходит: это не числовое поле и не такая запись ограничения длины. Для минимального количества символов используйте minlength.

Пример:

[tel* tel-230 minlength:6 maxlength:20 "+998"]

[tel* tel-230 minlength:6 maxlength:20 "+998"]

Но учитывайте, что minlength:6 проверяет длину всей строки. Если у Вас уже подставлен префикс +998, пользователь может ввести слишком мало оставшихся цифр, а общая длина всё равно формально пройдёт. Поэтому для телефона лучше использовать маску или кастомную валидацию.

Пример кастомной проверки для поля tel-230:

add_filter('wpcf7_validate_tel*', 'custom_phone_length_validation', 20, 2);
add_filter('wpcf7_validate_tel', 'custom_phone_length_validation', 20, 2);
 
function custom_phone_length_validation($result, $tag) {
    if ($tag->name !== 'tel-230') {
        return $result;
    }
 
    $value = preg_replace('/D+/', '', $_POST['tel-230'] ?? '');
 
    if (strlen($value) < 9) {
        $result->invalidate($tag, 'Введите полный номер телефона.');
    }
 
    return $result;
}

add_filter('wpcf7_validate_tel*', 'custom_phone_length_validation', 20, 2); add_filter('wpcf7_validate_tel', 'custom_phone_length_validation', 20, 2); function custom_phone_length_validation($result, $tag) { if ($tag->name !== 'tel-230') { return $result; } $value = preg_replace('/D+/', '', $_POST['tel-230'] ?? ''); if (strlen($value) < 9) { $result->invalidate($tag, 'Введите полный номер телефона.'); } return $result; }

Так Вы проверяете не количество символов с пробелами и плюсами, а количество цифр. Для удобства пользователя можно дополнительно поставить JS-маску телефона, но серверную проверку всё равно лучше оставить.

Если используете маску телефона, не полагайтесь только на фронтенд. Пользователь или бот может отправить POST-запрос напрямую без JS. Поэтому минимальную длину и формат номера нужно проверять на сервере через фильтр CF7. JS-маска отвечает за удобство ввода, а PHP-валидация — за безопасность и качество данных.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно