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

1

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

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.

Теги:
filter
echo
constants

2 ответа

5

Чтобы получить фактическое имя константы, вам, вероятно, нужно передать фильтр в виде строки и использовать 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');
  • 0
    Отличный ответ. +1
  • 0
    Спасибо за решение .. работает как шарм
Показать ещё 1 комментарий
1

FILTER_VALIDATE_EMAIL - это именованная константа, которая установлена в 274. Функция validate() никогда не видит "FILTER_VALIDATE_EMAIL", она просто видит 274 в нее и передает 274 в filter_var(), которая знает, как ее обрабатывать.

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

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

  • 0
    Спасибо за объяснение!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню