【问题标题】:PHP: Is_numeric returns false on 0 [closed]PHP:Is_numeric 在 0 上返回 false [关闭]
【发布时间】:2011-02-15 23:56:55
【问题描述】:

Is_numeric()is_int() 如果值为 0,则返回 false。我可以做些什么来验证特定值是否仅在 PHP 中是数字?

我们是直奔正则表达式阵营,还是已经有一些不错的、方便的功能?

谢谢!

【问题讨论】:

  • 没有复制,is_numeric(0) 为我返回 bool(true)。与is_int 相同
  • 你确定不是字母 O 而不是零?
  • 如果我使用 $var = 0; 我对两者都正确-- 介意发布一些代码吗?
  • 可能相关...不同的语言但类似的问题:stackoverflow.com/questions/691199/c-parse-string-0-to-integer/…
  • 感谢您投票否决我。我当然首先验证了它是 0(零)。

标签: php regex integer numerical numeric


【解决方案1】:

这两种情况对我来说都是真实的:

var_dump(is_numeric(0));
var_dump(is_int(0));

结果:

bool(true)
bool(true)

【讨论】:

  • 很奇怪。不知道为什么我的测试(Windows)环境返回 false。
【解决方案2】:
var_dump(is_int("0"));

将传递 false ,因为您将零作为字符串文字传递给它。您可以尝试传递与已通过(我相信) parseInt("");

的变量相同的东西

虽然我的 php 可能有点不对劲,但过去一两周一直在不停地编写 Javascript。

【讨论】:

  • 嗨!该字符串没有作为字符串传递。
  • @Industrial 这是一个悖论 ;)
  • @Gordon Duuh。那绝对是名人堂的一员。传递的值不是字符串,而只是一个数字。我希望这可以理解;)
【解决方案3】:

零,因为整数是空的。 所以在检查 Is_numeric() 或 is_int() 之前确保没有检查空

【讨论】:

  • 谢谢!令人惊讶的是,这正是我正在做的! :)
【解决方案4】:

在处理 REQUEST 时,最好先使用 filter_input 检查输入。这是来自 $_GET 的示例检查“id”。

filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT)

完整示例

if (is_int(filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))) {
        $id = $_GET['id'];
} else {
        die('please input a integer');
}

嗯,该功能提供版本 PHP >= 5.2。

【讨论】:

    【解决方案5】:

    我在同样的问题上苦苦挣扎,结果数字后面有一个空格。

    长话短说,数字是多少:

    is_numeric(" 0.0") --> YES
    is_numeric("0.0 ") --> NO
    

    这是一个例子......

    public function getCoordinates()
    {
        return sprintf('%1$f , %2$f',$this->getLatitude(),$this->getLongitude());
    }
    

    在后期...

            $myarr = explode(",",$_ScreenCoordinates);
            echo "_ScreenCoordinates:$_ScreenCoordinates<br>";
            echo "myarr[0]:".$myarr[0]." - ".((is_numeric($myarr[0]))?"YES":"NO")."<br>";
            echo "myarr[1]:".$myarr[1]." - ".((is_numeric($myarr[1]))?"YES":"NO")."<br>";
            echo "trimmed[0]:".$myarr[0]." - ".((is_numeric(trim($myarr[0])))?"YES":"NO")."<br>";
    

    在屏幕上打印:

    Array ( [0] => 1.200000 [1] => 123.456000 )
    _ScreenCoordinates:1.200000 , 123.456000
    myarr[0]:*1.200000 * - NO
    myarr[1]:* 123.456000* - YES
    trimmed[0]:*1.200000 * - YES
    

    【讨论】:

      【解决方案6】:

      如果 0 实际上是布尔值 FALSE,也会发生这种情况。 is_numeric() 总是返回 FALSE 作为布尔值。

      【讨论】:

        【解决方案7】:
        if($price != 0) {
            if(is_numeric($price)) {
                $price = $price; // numeric
            } else { // is not numeric }
        } else {
            $price = $price; // 0 as numeric
        }
        

        【讨论】:

        • 正确格式化你的答案,你真的不需要回答一个 7 年前的问题,而这个问题恰好有一个公认的答案。
        • 这个答案不仅没有意义,而且还有一个语法错误要引导。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-10-14
        • 2015-06-21
        • 2012-02-27
        • 2020-09-04
        • 1970-01-01
        • 2018-08-16
        相关资源
        最近更新 更多