Filter var: примеры (PHP)
filter_var(mixed $value, int $filter = FILTER_DEFAULT, array|int $options = 0): mixedФункция filter_var выполняет фильтрацию данных с использованием указанного фильтра. Она применяется для валидации и санации переменных, чаще всего пользовательского ввода. Функция доступна в PHP с версии 5.2.0.
Синтаксис функции: filter_var(mixed $value, int $filter = FILTER_DEFAULT, array|int $options = null): mixed
Аргументы:
- $value - значение для фильтрации. Может быть строкой, массивом или другим типом.
- $filter - идентификатор применяемого фильтра. По умолчанию
FILTER_DEFAULT(эквивалентноFILTER_UNSAFE_RAW). - $options - ассоциативный массив опций или побитовая маска флагов. Для некоторых фильтров требуется указать флаги.
Фильтры разделены на несколько групп: валидация, санация и другие. Фильтры валидации проверяют соответствие формату и возвращают значение или false. Фильтры санации очищают данные и возвращают измененное значение.
$email = 'user@example.com';
$result = filter_var($email, FILTER_VALIDATE_EMAIL);
echo $result !== false ? 'Valid' : 'Invalid';Valid
$email = 'user@example.comПохожие функции PHPВ PHP существуют другие функции для работы с данными:
- filter_input - получает и фильтрует внешнюю переменную. Удобна для обработки GET, POST, COOKIE данных без прямого доступа к суперглобальным массивам.
- preg_match - выполняет проверку по регулярному выражению. Требует написания шаблона, но дает гибкость.
- ctype_* - семейство функций проверки символов (ctype_digit, ctype_alpha). Быстрее для простых проверок.
- htmlspecialchars - преобразует специальные символы в HTML-сущности. Используется для вывода в HTML.
- intval, floatval - преобразуют переменную к числу. Не проверяют формат, только извлекают число.
Выбор функции зависит от задачи. filter_var предлагает стандартизированный подход для частых сценариев валидации и санации.
Типичные ошибкиНеправильная интерпретация возвращаемого значения$value = '0';
$result = filter_var($value, FILTER_VALIDATE_BOOLEAN);
if ($result) {
echo 'True';
} else {
echo 'False';
}
False
Значения '0', 'false', 'off' возвращают false при валидации булевого типа, что может быть неочевидным.
Использование FILTER_VALIDATE_INT для нецелых чисел$value = '123.45';
$result = filter_var($value, FILTER_VALIDATE_INT);
var_dump($result);
bool(false)
Функция возвращает false для дробных чисел, так как ожидает целое значение.
Отсутствие проверки на false$url = 'invalid-url';
$result = filter_var($url, FILTER_VALIDATE_URL);
$host = parse_url($result, PHP_URL_HOST);
echo $host;
Warning: parse_url() expects parameter 1 to be string, bool given
Необходимо проверять, что функция не вернула false перед дальнейшей обработкой.
Изменения в новых версиях PHPВ PHP 8.0 появилась поддержка FILTER_VALIDATE_BOOL как альтернативы FILTER_VALIDATE_BOOLEAN. Оба идентификатора работают одинаково.
В PHP 8.1 добавлен флаг FILTER_FLAG_EMAIL_UNICODE для валидации email с Unicode символами.
$email = 'test@пример.рф';
$result = filter_var($email, FILTER_VALIDATE_EMAIL, FILTER_FLAG_EMAIL_UNICODE);
var_dump($result);
string(31) "test@пример.рф"
С версии PHP 8.0 строгая типизация влияет на поведение функции при неверных типах аргументов.
Расширенные примерыКастомный фильтр с callbackПример phpfunction custom_filter($value) {
return strtoupper($value);
}
$options = ['options' => ['callback' => 'custom_filter']];
$result = filter_var('test', FILTER_CALLBACK, $options);
echo $result;
TEST
Валидация IP-адреса с флагамиПример php$ipv6 = '2001:0db8:85a3:0000:0000:8a2e:0370:7334';
$result = filter_var($ipv6, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6);
var_dump($result);
string(39) "2001:0db8:85a3:0000:0000:8a2e:0370:7334"
Санация числа с плавающей точкойПример php$number = '123.45abc';
$result = filter_var($number, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
echo $result;
123.45
Валидация мак-адресаПример php$mac = '00:1A:2B:3C:4D:5E';
$result = filter_var($mac, FILTER_VALIDATE_MAC);
var_dump($result);
string(17) "00:1A:2B:3C:4D:5E"
Фильтрация массиваПример php$data = ['email' => 'test@example.com', 'age' => '25'];
$filters = [
'email' => FILTER_VALIDATE_EMAIL,
'age' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 1]]
];
$result = filter_var_array($data, $filters);
print_r($result);
Array
(
[email] => test@example.com
[age] => 25
)Аналоги в других языкахFilter var в Python
В Python нет прямой аналогии, но есть библиотеки и методы для валидации.
import re
email = 'user@example.com'
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
is_valid = bool(re.match(pattern, email))
print(is_valid)
True
Filter var в Javascript
JavaScript предоставляет регулярные выражения и API для валидации.
const email = 'user@example.com';
const regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
const isValid = regex.test(email);
console.log(isValid);
true
Filter var в MySQL
В MySQL есть функции для проверки данных, но они работают внутри запросов.
SELECT 'user@example.com' REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';
1
Основное отличие - в PHP функция filter_var является встроенной и предоставляет единый интерфейс для множества типов фильтрации.
PHP filter_var function comments
EnFilter var Filters a variable with a specified filter