通过传递变量 PHP 给 filter_var() 过滤器(filter_var() 期望参数 2 很长,字符串给定)

Give filter_var() filter by passing a variable PHP (filter_var() expects parameter 2 to be long, string given)

现在我正在尝试使用 filter_var() 验证一些邮政数据。我想从我的数据库中获取与每个输入相关的过滤器。因此,如果输入应按 EMAIL 过滤,则变量将包含 FILTER_VALIDATE_EMAIL。然后将像这样传递:

        foreach($this->postdata as $key => $input){
        if(!((empty($requirements[$key][1])) || $requirements == 'allowed')){
            if(filter_var($input, $requirements[$key][1]) === false){
                $errors = true;
            }
        }
    }

$postdata 看起来像这样:

    array (size=4)
  'personer_navn' => 
    array (size=1)
      0 => int 0
  'personer_alder' => 
    array (size=1)
      0 => int 1
  'personer_kon' => 
    array (size=2)
      0 => int 2
      1 => int 3
  'personer_by' => 
    array (size=1)
      0 => int 4

$requirements 看起来像这样:

    array (size=4)
  'personer_navn' => 
    array (size=4)
      0 => string 'string' (length=6)
      1 => string 'FILTER_VALIDATE_EMAIL' (length=21)
      2 => string '' (length=0)
      3 => string '' (length=0)
  'personer_alder' => 
    array (size=4)
      0 => string 'int' (length=3)
      1 => string 'FILTER_VALIDATE_EMAIL' (length=21)
      2 => string '' (length=0)
      3 => string '' (length=0)
  'personer_kon' => 
    array (size=4)
      0 => string 'allowed' (length=7)
      1 => string 'allowed' (length=7)
      2 => string 'allowed' (length=7)
      3 => string 'allowed' (length=7)
  'personer_by' => 
    array (size=4)
      0 => string 'string' (length=6)
      1 => string 'FILTER_VALIDATE_EMAIL' (length=21)
      2 => string '' (length=0)
      3 => string '' (length=0)

同样,问题似乎是将 $requirements[$key][1] 传递给 filter_var() 函数。

感谢任何帮助。

FILTER_VALIDATE_EMAIL 不能用作字符串。尝试不带引号使用它。可以在 documentation

中找到示例

将修复错误的简单更改

foreach($this->postdata as $key => $input){
        if(!((empty($requirements[$key][1])) || $requirements == 'allowed')){
            if(filter_var($input, constant( $requirements[$key][1]) ) === false){
                $errors = true;
            }
        }
    }

constant 函数 returns 字符串过滤器的 (integer) 值。

也阅读 P.P-s 答案。