【问题标题】:PHP - Validate integer with filter_var() functionPHP - 使用 filter_var() 函数验证整数
【发布时间】:2015-11-26 15:38:27
【问题描述】:

我在网上到处都看到,如果我想使用 filter_var() 函数来验证一个整数,我应该写这样的东西:

if (filter_var($int, FILTER_VALIDATE_INT) !== false){
    echo 'Integer ok';
}else{
    echo 'Not an integer';
}

据我所知,表达式 filter_var($int, FILTER_VALIDATE_INT) 如果 $int 的内容未计算为整数或返回 $int 内的整数,则返回 false。

由于任何整数被 PHP 评估为真(当然除了 0),我想知道这样做时的具体区别:

if (filter_var($int, FILTER_VALIDATE_INT) !== false)

或者这个:

if (filter_var($int, FILTER_VALIDATE_INT) == true)

这 2 个表达式针对哪些值发送不同的结果?

我还有另一个问题:如果我的变量 $int 包含布尔值 true,那么无论如何结果似乎都是“整数 ok”。我们有义务隔离这个案例吗?因为每个人都在谈论“数字以0开头”的情况,而不是关于这个……

谢谢!

编辑:请不要建议我使用其他方法来验证整数,我不想使用其他方法。事实上,我想深入了解 PHP 是如何工作的。这就是为什么我想知道这种总是看到“!==false”而不是简单地看到“==true”的情况

【问题讨论】:

  • 返回过滤后的数据,如果过滤失败则返回 FALSE。最好的办法是 .. (=== false) {} else {}
  • 取决于您是否要先检查它是 FALSE 还是 TRUE。任君挑选。
  • 只能使用is_numericphp.net/manual/en/function.is-numeric.php
  • 很遗憾,你们都没有回答我...

标签: php function boolean


【解决方案1】:

你也可以使用ctype_digit(),试试这个:

if (!ctype_digit($int)) {
    echo 'Not an integer';
} else {
     echo 'Integer ok';
}

【讨论】:

  • @PierreGiraud 你到底想要什么?
【解决方案2】:

不同之处在于,当整数为 0 时,检查 false 仍然有效,正如您已经指出的,而检查 true 则必须对 0 进行额外检查。

布尔值 true 将返回值为 1 的有效 int,如过滤器 PHP 手册页上的 this comment 中所述。

您可以通过打印通过过滤器的各种值的结果来轻松地自行测试。

【讨论】:

    猜你喜欢
    • 2022-10-13
    • 2015-09-14
    • 2012-02-26
    • 2011-03-23
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多