【问题标题】:function to check if the value is int or float but not string in PHP用于检查值是 int 还是 float 但不是 PHP 中的字符串的函数
【发布时间】:2017-07-30 22:09:04
【问题描述】:

是否有任何内置函数来检查值是数字,任何整数类型,如 int、float 但不是字符串。 is_numeric 为“2”返回真。我应该同时检查 is_int 和 is_float 吗?

当 $a 和 $b 不是数字时,我想要的函数应该返回“无效值”:

function myFunction($a, $b, $sign){}

【问题讨论】:

  • $number = is_int($value) || is_float($value)
  • 谢谢,PHP 中还有其他数字类型吗?像双精度还是小数?
  • 你为什么问我?阅读手册:php.net/manual/en/language.types.php
  • gettype( $var ) 返回 double 用于浮点数,如果我没记错的话。
  • is_numeric($value) && !is_string($value) 是第一条评论的替代品。

标签: php


【解决方案1】:

这不是一个答案本身,但这太多了,无法发表评论:

function isFloatOrInt($var)
{
    $type = gettype($var);

    switch ($type) {
        case 'integer':
        case 'double':
            return true;
        case 'string':
            //check for number embedded in strings "1" "0.12"
            return preg_match('/^[0-9]+(?:\.[0-9]+)?$/', $var);
        default:
            return false;
}

如果您认为数字的字符串版本仍然是数字,则预匹配在这里会很有用。

你说

但不是字符串

但这是否意味着这个'string' 或这个'10' 而不是10 例如,即。一个字符串也是一个数字?

可能有很多方法可以做到这一点,但也有一些极端情况,所以这在很大程度上取决于您的需求。例如,octet 是数字 0777 还是指数 12e4 甚至是十六进制 0xf4c3b00c

【讨论】:

  • 这绝对不是最简单的解决方案。
  • 否,但在某些情况下,is_numeric 可以在您不希望的情况下返回一个数字,例如 '102e8',它可能会将其视为指数。
  • 视情况而定,不能说电话号码或邮政编码。例如,我见过 excel 将电话号码转换为 csv 文件中的指数。
【解决方案2】:

is_numeric($value) && !is_string($value)

这就是我要找的东西

【讨论】:

    猜你喜欢
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 2020-09-03
    • 2011-11-10
    相关资源
    最近更新 更多