Как отобразить фильтр, используемый в filter_var

Сначала я покажу функцию:

function validate($data, $filter){
if(!filter_var($data, $filter))
{
return 'Filter used:'.$filter;
}
else
{
return 'good';
}
}

Когда я использую эту функцию, она будет выглядеть так:

$email = '[email protected]';
echo validate($email, FILTER_VALIDATE_EMAIL);

Выход:

Использовано фильтров: 274

Проблема в том, что я хочу вывод:

Используемый фильтр: FILTER_VALIDATE_EMAIL.

1

Решение

Чтобы получить реальное имя константы, вам, вероятно, нужно передать фильтр в виде строки и использовать constant():

function validate($data, $filter){
if(!filter_var($data, constant($filter)))
{
return 'Filter used:'.$filter;
}
else
{
return 'good';
}
}

Тогда используйте это как:

echo validate($email, 'FILTER_VALIDATE_EMAIL');

Я задумался о нескольких флагах, и мне было скучно. Это может быть очень грязно, но для простых фильтров это работает:

function validate(){
$args = func_get_args();
$data = array_shift($args);
$con_args = array_map('constant', $args);
array_unshift($con_args, $data);

if(!call_user_func_array('filter_var', $con_args))
{
return 'Filter used:'.implode(', ', $args);
}
else
{
return 'good';
}
}

echo validate($url, 'FILTER_VALIDATE_URL', 'FILTER_FLAG_PATH_REQUIRED');
5

Другие решения

FILTER_VALIDATE_EMAIL это именованная константа это установлено в 274, Ваш validate() функция никогда не видит «FILTER_VALIDATE_EMAIL», она просто видит 274 вводится в него и проходит 274 в filter_var(), который знает, как справиться с этим.

Одним из преимуществ констант для разработчика является то, что, используя IDE с автозаполнением и интеллектом кода, вы можете быть уверены в имени переменной и, таким образом, можете избежать возможных опечаток.

Посмотрите на ответ @ AbraCadaver для элегантного решения вашего запроса.

1

По вопросам рекламы [email protected]