PHP 确定变量是否为数字的函数(不是十六进制或其他包含字母的数字)

PHP function to determine if a variable is a number(not hex or other numericals that have letters in them)

是否有 php 函数而不是 is_numeric 来确定变量是否为数字(非十六进制)。因为我需要验证一个变量是否是 number/decimal,没有十六进制或其他类型的包含字母的数字。

尝试ctype_digit。如果字符串文本中的每个字符都是十进制数字,这将 returns 为 TRUE,否则为 FALSE。

自己制作如下:

<?php
function is_number($n = null){
    if (is_null($n)){
        return false;
    }
    if (is_int($n)){
        return true;
    }
    $n = $n.'';
    $decimal = explode('.',$n);
    if (is_int($decimal[0]*1) && is_int($decimal[1]*1)){
        return true;
    }

    return false;

}

if (is_number(1.2)){
    echo "yes";
}
else{
    echo "no";
}

DEMO

据我所知没有内置功能。正则表达式可以很容易地捕获它,^\d+(\.\d*)?$(将匹配“0.123”,但不匹配“.123”)。

但这是另一种替代策略。

<?php

function isDigit($var) {
    return ((string)$var == (float)$var);
}

var_export(isDigit('123.3')); // true
var_export(isDigit('-321'));  // true
var_export(isDigit('0xFFF')); // false

更新:

我刚刚想起 filter_var(),我认为它提供了最好的解决方案。

<?php 
if (filter_var($var, FILTER_VALIDATE_FLOAT) !== false) {
    echo 'is float';
} else {
    echo 'is not float';
}