簡體   English   中英

如何回顯filter_var中使用的過濾器

[英]How to echo filter used in filter_var

首先,我將展示該功能:

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

當我使用此功能時,它將如下所示:

$email = 'hello@hello.org';
echo validate($email, FILTER_VALIDATE_EMAIL);

輸出為:

使用的過濾器:274

問題是我希望輸出為:

使用的過濾器:FILTER_VALIDATE_EMAIL。

要獲取實際的常量名稱,您可能需要將過濾器作為字符串傳遞,並使用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');

FILTER_VALIDATE_EMAIL是設置為274命名常量 您的validate()函數永遠不會看到“ FILTER_VALIDATE_EMAIL”,它只會看到274傳遞給其中,並將274傳遞給filter_var() ,后者知道如何處理它。

對於開發人員而言,常量的優點之一是:通過使用具有自動完成功能和代碼智能的IDE,您可以確定變量的名稱,從而避免可能的輸入錯誤。

查看@AbraCadaver的答案,為您的查詢提供優雅的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM