如果值与过滤器匹配,如何使用filter_var返回true或false?

时间:2015-01-13 08:58:07

标签: php filter-var

有没有办法在php中使用filter_var,如果值匹配正确的过滤器则返回true,否则返回false?

我想要的是:

filter_var('email@example.com', FILTER_VALIDATE_EMAIL) => true
filter_var('http://google.com', FILTER_VALIDATE_URL) => true
filter_var('http://google', FILTER_VALIDATE_URL) => false
filter_var('test', FILTER_VALIDATE_EMAIL) => false

谢谢!

4 个答案:

答案 0 :(得分:2)

如何围绕满足您要求的功能包装此功能? 例如:

function my_filter_var($a, $b) {
    if(filter_var($a, $b)===false){
        return false;
    }
    else {
        return true;
    }
}

但是我不建议使用它,因为它是一个不必要的函数调用,当你可以实现你想要的而不实际调用函数(因为调用函数是昂贵的)。 发布此功能只是因为您想要以某种格式输出。

所以这个功能将如下工作:

my_filter_var('email@example.com', FILTER_VALIDATE_EMAIL) => true
my_filter_var('http://google.com', FILTER_VALIDATE_URL) => true
my_filter_var('http://google', FILTER_VALIDATE_URL) => false
my_filter_var('test', FILTER_VALIDATE_EMAIL) => false

你应该使用我在函数内部所做的,而不是创建一个函数。

答案 1 :(得分:0)

如果有效则返回过滤后的值,否则返回false,因此这应该有效。

$valid_email = filter_var('email@example.com', FILTER_VALIDATE_EMAIL) ? true : false;

相同的网址

$valid_url = filter_var('http://google.com', FILTER_VALIDATE_URL) ? true : false; 

答案 2 :(得分:0)

来自文档:

  

返回过滤后的数据,如果过滤器失败,则返回FALSE。

因此:

if( filter_var('email@example.com', FILTER_VALIDATE_EMAIL) === FALSE ){
  // Invalid
}else {
  // Valid
}

是有效的代码。查看the documentation for filter_var了解更多信息。

答案 3 :(得分:0)

我会使用这样简单的东西:

(bool) filter_var('email@example.com', FILTER_VALIDATE_EMAIL);

总是会产生一个布尔值:https://3v4l.org/BvAdE

另请注意,您说您希望第三个示例返回false,但http://google是完全有效的网址。