【问题标题】:is_float not detecting float numbersis_float 未检测到浮点数
【发布时间】:2015-02-02 20:19:13
【问题描述】:

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

这是我的代码:

PHP:

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

HTML:

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

【问题讨论】:

  • 对我来说很好用!请向我们展示您的输入、当前输出和您的预期输出
  • 3.00 是我的输入@Rizier123
  • 输入始终是字符串或数组(如果指定),因此is_float 将始终返回 false,因此 if 条件为 true。请改用filter_var()FILTER_VALIDATE_FLOAT
  • 你确定没有多余的字符,比如周围的空格?在使用之前尝试trim()-ming 值

标签: php forms floating-point floating-point-precision


【解决方案1】:

表单输入始终是字符串,因此 if 条件将始终返回您指定的错误消息。请改用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.";
}

【讨论】:

  • 我是否必须使用雷鬼将条目限制为#.## 格式?
【解决方案2】:

试试这个:

$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';
}

【讨论】:

  • 我是否必须使用雷鬼将条目限制为#.## 格式?
  • floatval 由于某种原因对我不起作用,但这确实有效:if($num == (float)$num)(echo 'is float';) - 它不会过滤 int 你(但如果使用相同的技巧和(int)$num,你可以创建另一个)
【解决方案3】:

来自documentation

判断给定变量的类型是否为浮点数。

要测试一个变量是数字还是数字字符串(例如表单输入,它总是一个字符串),必须使用 is_numeric()。

根据定义,您的 $_POST["gpa"] 是一个字符串,而不是一个浮点数。你可以在var_dump($_POST["gpa"])时看到这个

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

    • 我是否必须使用雷鬼将条目限制为#.## 格式?
    • 是的,这是唯一的方法,如果你真的需要这样做的话。或者你可以round($n, 2)它来中继所有多余的数字
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多