【问题标题】:is_numeric() vs. is_float() vs. is_int()is_numeric() 与 is_float() 与 is_int()
【发布时间】:2011-11-29 07:11:22
【问题描述】:

我的理解是……

如果is_numeric($input) === true

然后

is_float($input) === true

is_int($input) === true

$input === 0

$input 是一个数字字符串(意味着如果它没有用引号括起来,它将满足前 3 个中的一个)。

准确吗?还有其他区别吗?

【问题讨论】:

  • 阅读这个表格内容:php.net/manual/en/language.types.php也许这就是你要找的......
  • 我想我对浮动是什么感到最困惑。我认为任何浮点数也是数字,但不是相反。

标签: php types numbers


【解决方案1】:

请参阅is_numeric 上的 PHP 文档。它谈论了所有被允许的事情,而且不仅仅是is_floatis_int


同样重要的是要注意is_int 仅适用于整数类型的事物,这意味着不允许使用字符串表示形式。这是验证表单输入是否为整数时的常见问题。您应该使用filter_var 或过滤器系列中的过滤器FILTER_VALIDATE_INT。对于浮点数,请使用FILTER_VALIDATE_FLOAT


此外,如果您尝试检查整数的原因是将参数验证为 int,那么在 PHP 7 中您可以这样做:

function foo(int $i) {
    // $i is guaranteed to be an int (is_int) will be true
}

PHP 7 有两种不同的转换为 int 的模式; this answer 再解释一下。

请注意,如果您正在验证表单元素的内容,这可能不是您想要的。为此使用filter_var 解决方案。

【讨论】:

  • 你不需要函数,你可以把它转换成整数:$n = (int)$i
【解决方案2】:

请参阅docs。数值可以是:

  • 整数
  • 一个花车
  • 指数型
  • 正十六进制
  • 包含其中大部分的字符串

【讨论】:

  • Thx // 指数符号包含在浮点数中。你对 hexes 是对的——看起来它们不是,而且没有 is_hex 函数。
  • @ryanve 它适用于 PHP,但我通常不会将指数(科学)视为浮点数。
猜你喜欢
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-09
相关资源
最近更新 更多