Валидация чисел

Тренажер по PHP для пользователей с начальным уровнем подготовки.

Тренажер PHP

Работа с формами — это основа любого интерактивного сайта. Но принимать данные от пользователей вслепую опасно и неэффективно. В этом уроке мы разберемся, как проверять, что введённые значения являются числами. Это называется валидацией. Ты научишься использовать встроенные в PHP функции, чтобы убедиться, что возраст, количество товара или цена указаны корректно. Эти задания помогут тебе писать более надежный и безопасный код, который не боится ошибочного ввода от пользователя. Мы пройдем путь от самых простых проверок до использования современных и мощных фильтров данных.

Список тем

Простая проверка на число

id: 39045_task_1

Давай начнем с основ. В PHP есть специальная функция для проверки, является ли переменная числом или числовой строкой. Дополни код, чтобы он проверял значение переменной $input и выводил "Это число", если проверка прошла успешно.

Заполните пропуски
<?php
$input = "25"; // Это значение может прийти из формы

if (input1S(input2S)) {
    echo "Это число";
} else {
    echo "Это не число";
}
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Найди ошибку в проверке типа

id: 39045_task_2

Программист попытался проверить, что возраст, полученный из формы, является числом. Однако он допустил частую ошибку новичков. Данные из форм всегда приходят в виде строк. Код не работает так, как ожидалось. Найди и исправь ошибку в строке с условием.

Найдите ошибку и исправьте
<?php
// Представим, что это значение пришло из формы
$age_from_form = "30";
 
if (is_int($age_from_form)) {
    echo "Возраст корректен";
} else {
    echo "Ошибка: возраст должен быть числом.";
}
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Что вернет is_numeric?

id: 39045_task_3

Функция is_numeric() довольно гибкая. Она распознает не только обычные числа, но и строки, содержащие числа в разных форматах, включая экспоненциальную запись. Посмотри на код и определи, что он выведет на экран.

Выберите правильный вариант ответа
<?php
$value = "1.5e2";
var_dump(is_numeric($value));
?>
Сообщения
Проверить
Показать подсказку

Современная валидация с filter_var

id: 39045_task_4

Хотя is_numeric() полезна, в PHP есть более мощный и предпочтительный инструмент для валидации данных — функция filter_var(). Она позволяет применять различные фильтры к значению. Собери из предложенных частей работающий код для проверки, является ли значение целым числом.

Нужно правильно расставить в пропуски предложенные варианты
<?php
$count = "100";
$validated_count = input1S(input2S, input3S);

if ($validated_count !== false) {
    echo "Значение является целым числом: " . $validated_count;
} else {
    echo "Значение не является целым числом.";
}
?>
$count
filter_var
FILTER_VALIDATE_INT
is_numeric
"count"
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Результат фильтрации при неудаче

id: 39045_task_5

Важно понимать, что возвращает filter_var() не только при успехе, но и при неудаче. Если значение не проходит валидацию, функция возвращает определенное значение. Посмотри на код и напиши, что именно выведет var_dump().

Что должно получиться?
<?php
$not_a_number = "oops";
$result = filter_var($not_a_number, FILTER_VALIDATE_INT);
var_dump($result);
?>
Сообщения
Проверить
Показать подсказку

Сопоставь фильтры и их назначение

id: 39045_task_6

У `filter_var()` есть множество фильтров не только для валидации, но и для "очистки" (санитизации) данных. Сопоставь константы фильтров в правой колонке с их описаниями в левой.

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
Проверяет, является ли значение целым числом
Проверяет, является ли значение числом с плавающей точкой
Удаляет все символы, кроме цифр, знаков плюса и минуса
FILTER_SANITIZE_NUMBER_INT
FILTER_VALIDATE_FLOAT
FILTER_VALIDATE_INT
Сообщения
Проверить
Показать подсказку

Проверка числового диапазона

id: 39045_task_7

Часто недостаточно просто проверить, что значение — это число. Нужно также убедиться, что оно попадает в определённый диапазон. Дополни код так, чтобы он проверял, что возраст (переменная $age) находится в диапазоне от 18 до 65 лет включительно.

Заполните пропуски
<?php
$age = 25;
$is_valid = false;

if (is_numeric($age)) {
    // Преобразуем строковое значение из формы в число
    $age = (int)$age; 
    
    if (input1S && input2S) {
        $is_valid = true;
    }
}

var_dump($is_valid);
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Сборка скрипта валидации количества

id: 39045_task_8

Собери из фрагментов полноценный PHP-скрипт. Он должен обрабатывать POST-запрос, получать из него 'quantity', проверять, что это целое число больше нуля, и выводить соответствующее сообщение. Некоторые фрагменты лишние и не должны использоваться.

Перетяните в правильном порядке строки из одного блока в другой
echo "Количество принято: " . $quantity;
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$quantity = $_POST['quantity'];
<?php
} else {
if (filter_var($quantity, FILTER_VALIDATE_INT) && $quantity > 0) {
echo "Ошибка: введите положительное число.";
}
// $_POST['quantity'] = 5; // Установка значения для теста
if ($quantity < 0) {
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Исправь логическую ошибку

id: 39045_task_9

Этот скрипт должен выводить сообщение об ошибке, если введенное количество товара меньше 1 или больше 10. Однако из-за логической ошибки в условии, сообщение об ошибке никогда не выводится. Найди и исправь строку с ошибочной логикой.

Найдите ошибку и исправьте
<?php
$items = 0; // Пример ввода
 
$items = filter_var($items, FILTER_VALIDATE_INT);
 
if ($items !== false) {
    if ($items < 1 && $items > 10) {
        echo "Ошибка: количество должно быть от 1 до 10.";
    } else {
        echo "Количество в допустимом диапазоне.";
    }
} else {
    echo "Ошибка: введите целое число.";
}
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру