is_float 未检测浮点数

is_float not detecting float numbers

我正在使用 is_float() 检查输入的数字是否为浮点数,但当我输入 3.00 时它一直抛出 echo() 消息。还有其他解决方案吗?还是我做错了什么?

这是我的代码:

PHP:

if(!is_float($_POST["gpa"])){
    echo "GPA must be in #.## format.";
}

HTML:

<input type="text" name="gpa" />

试试这个:

$num = 2.6;

if($num === floatval($num)){
    echo 'is float';
}else{
    echo 'is not';
}

另一种方式是正则表达式:

$num = '345.56678';//post is string

$patt = '/^\d+\.{1}\d+$/';
$resp = preg_match($patt,$num);
if($resp){
    echo 'is float';
}else{
    echo 'is not';
}

来自documentation

Finds whether the type of the given variable is float.

To test if a variable is a number or a numeric string (such as form input, which is always a string), you must use is_numeric().

根据定义,您的 $_POST["gpa"] 是一个字符串,而不是一个浮点数。当你做 var_dump($_POST["gpa"])

时你可以看到这个

验证字符串中浮点值的正确方法是:

if( !filter_var($_POST["gpa"], FILTER_VALIDATE_FLOAT) ) echo 'error!';

表单输入始终是字符串,因此 if 条件将始终 return 您指定的错误消息。请改用 filter_var()

if(filter_var($_POST['gpa'], FILTER_VALIDATE_FLOAT) === false) {
    echo "GPA must be in #.## format.";
}

如果要验证格式,您需要使用 Regular Expressions.

([0-9]{1,})\.([0-9]{2,2})

您可以单独使用 RegEx 而忘记 filter_var(),因为它的作用相同。

if(preg_match('/([0-9]{1,})\.([0-9]{2,2})/', $_POST['gpa']) == 0) {
    echo "GPA must be in #.## format.";
}