Filter var array: примеры (PHP)
filter_var_array(array $array, array|int $options = FILTER_DEFAULT, bool $add_empty = true): array|false|nullФункция filter_var_array предоставляет возможность фильтрации нескольких переменных с использованием одинаковых или различных правил. Применяется при необходимости валидации или санитизации массива данных, например, полученных из формы или внешнего источника.
Первый аргумент (array $data): массив данных для обработки. Ключи массива соответствуют именам переменных.
Второй аргумент (array|int $options): может быть массивом, определяющим правила фильтрации для каждого элемента, или целым числом (ID фильтра), применяемым ко всем элементам. В массиве каждый ключ соответствует ключу в $data, а значение может быть либо ID фильтра, либо массивом с параметрами: 'filter', 'flags', 'options'.
Третий аргумент (bool $add_empty = true): определяет, добавлять ли в результат элементы с ключами из $options, отсутствующие в $data, со значением NULL. Если false, такие ключи исключаются из результата.
Функция возвращает массив с отфильтрованными значениями или false при ошибке.
$data = ['age' => '25', 'score' => '100.5'];
$result = filter_var_array($data, FILTER_VALIDATE_INT);
print_r($result);Array
(
[age] => 25
[score] => false
)$data = ['email' => 'user@example.com', 'number' => '42'];
$options = [
'email' => FILTER_VALIDATE_EMAIL,
'number' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 1, 'max_range' => 100]]
];
$result = filter_var_array($data, $options);
print_r($result);Array
(
[email] => user@example.com
[number] => 42
)$data = ['ip' => '192.168.1.1', 'url' => 'https://example.com?q=test'];
$options = [
'ip' => FILTER_VALIDATE_IP,
'url' => ['filter' => FILTER_VALIDATE_URL, 'flags' => FILTER_FLAG_QUERY_REQUIRED]
];
$result = filter_var_array($data, $options);
print_r($result);Array
(
[ip] => 192.168.1.1
[url] => https://example.com?q=test
)filter_var: обрабатывает одну переменную. Используется, когда нужно проверить одно значение.
filter_input_array: получает и фильтрует массив внешних переменных (GET, POST, COOKIE и т.д.). Удобна для работы с суперглобальными массивами.
array_map с filter_var: позволяет применить filter_var к каждому элементу массива, но без гибкости разных правил для разных ключей.
Ручная валидация: использование регулярных выражений или других функций (ctype_*, is_*). Дает полный контроль, но требует больше кода.
import validators
email_valid = validators.email('user@example.com')
print(email_valid)True
В Python нет встроенной функции, полностью аналогичной filter_var_array, но можно использовать комбинации словарей и функций валидации.
const validator = require('validator');
let results = {
email: validator.isEmail('user@example.com'),
int: validator.isInt('25')
};
console.log(results);{ email: true, int: true }В JavaScript также отсутствует прямая аналогия, но библиотеки предоставляют схожие возможности.
SELECT
VALIDATE_PASSWORD_STRENGTH('password') AS password_strength,
CAST('42' AS UNSIGNED) AS casted_int;MySQL предлагает функции для проверки данных, но они встроены в SQL-запросы и не являются прямым аналогом.
$data = ['age' => '25'];
$options = FILTER_VALIDATE_INT; // Должен быть массив для одного элемента
$result = filter_var_array($data, $options);
var_dump($result);bool(false)
$data = ['num' => 'not_number'];
$result = filter_var_array($data, FILTER_VALIDATE_INT);
if ($result['num']) { // false интерпретируется как false
echo 'Valid';
} else {
echo 'Invalid';
}Invalid
$data = ['html' => '<script>alert(1)</script>'];
$result = filter_var_array($data, FILTER_VALIDATE_STRING); // Несуществующий фильтр
var_dump($result);NULL
В PHP 8.0 поведение функции filter var array было изменено: теперь при неверном ID фильтра выбрасывается исключение ValueError. Ранее возвращалось false или null.
// PHP 8+
try {
$result = filter_var_array(['test' => 'value'], ['test' => 9999]);
} catch (ValueError $e) {
echo $e->getMessage();
}filter_var_array(): Argument #2 ($options) must be a valid filter ID
В PHP 8.1 добавлена поддержка FILTER_NULL_ON_FAILURE для фильтров валидации.
$data = [
'ip' => '2001:0db8:85a3:0000:0000:8a2e:0370:7334',
'url' => 'https://example.com:8080/path'
];
$options = [
'ip' => ['filter' => FILTER_VALIDATE_IP, 'flags' => FILTER_FLAG_IPV6],
'url' => ['filter' => FILTER_VALIDATE_URL, 'flags' => FILTER_FLAG_PATH_REQUIRED | FILTER_FLAG_SCHEME_REQUIRED]
];
$result = filter_var_array($data, $options);
print_r($result);Array
(
[ip] => 2001:0db8:85a3:0000:0000:8a2e:0370:7334
[url] => https://example.com:8080/path
)filter_var($data, FILTER_CALLBACK, ['options' => function($v) {
return is_numeric($v) ? $v * 2 : false;
}]);
$data = ['a' => '5', 'b' => 'text'];
$options = [
'a' => ['filter' => FILTER_CALLBACK, 'options' => 'double'],
'b' => FILTER_UNSAFE_RAW
];
function double($v) { return is_numeric($v) ? $v * 2 : $v; }
$result = filter_var_array($data, $options);
print_r($result);Array
(
[a] => 10
[b] => text
)$data = ['user' => ['email' => 'test@example.com', 'age' => '30']];
$options = ['user' => ['filter' => FILTER_DEFAULT, 'flags' => FILTER_REQUIRE_ARRAY]];
$result = filter_var_array($data, $options);
print_r($result);Array
(
[user] => Array
(
[email] => test@example.com
[age] => 30
)
)