【问题标题】:How to use filter_var to return true or false if value matches the filter?如果值与过滤器匹配,如何使用 filter_var 返回 true 或 false?
【发布时间】:2015-01-13 08:58:07
【问题描述】:

有没有办法在 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

谢谢!

【问题讨论】:

  • 请访问以下链接,它将回答您的问题:phpro.org/tutorials/Filtering-Data-with-PHP.html#8
  • 为什么第三个会返回false
  • @PeeHaa 因为那不是电子邮件
  • 这是一个 URL @RashidShafique ...
  • 看起来你不能有一个直接的布尔值。

标签: php filter-var


【解决方案1】:

如何将此函数包装在满足您要求的函数周围? 例如:

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

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

【讨论】:

  • 不知道为什么这被否决了,这可能是最接近 OP 要求的...
  • "(因为调用函数很昂贵)" 你真的不必担心这个,因为任何差异都不会被注意到。
  • 可以忽略不计,但确实有所作为。我不会仅仅因为不想写 if 语句就推荐任何人创建一个新函数!
  • 我也不推荐它,但说它确实有影响的说法是“错误的”。
  • 当有人开始为几个这样的事情制作这样的功能并且它们被广泛使用时,这将会有所作为。我的观点是不要让它成为某人编程风格的习惯。
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

    如果有效则返回过滤后的值,否则返回 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; 
    

    【讨论】:

      【解决方案4】:

      来自文档:

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

      因此:

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

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

      【讨论】:

      • 我需要一个布尔值作为直接结果,而不需要 if。我以为我错过了什么,但这是唯一的选择。
      • 然后在表单中使用一些东西:$valid = (filter_var('email@example.com', FILTER_VALIDATE_EMAIL) !== FALSE)
      猜你喜欢
      • 2021-09-11
      • 2019-09-21
      • 2020-08-14
      • 2011-11-13
      • 2015-05-14
      • 2020-05-14
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多