PHP - 如何检查一个字符串是否包含浮点数

6
什么是最简单的方法来检查一个字符串是否包含有效的浮点数?
例如:
is_string_float("1") = true
is_string_float("1.234") = true
is_string_float("1.2e3") = true
is_string_float("1b2") = false
is_string_float("aldhjsfb") = false

"is_float("1") = false" 的意思不是我要找的。 - marcosh
2
因为1是整数,所以返回False。 - RiggsFolly
不行,因为“1”是一个字符串,而不是浮点数。同样的情况也适用于 is_float("1.234") - marcosh
4个回答

6

最简单的方法是使用内置函数is_float()。要测试一个变量是否为数字或数字字符串,必须使用is_numeric()


"Is_numeric" 就是我正在寻找的东西。 - marcosh

5
如果您确实想知道一个字符串是否仅包含浮点数,您不能只使用“is_float()”(类型错误)或“is_numeric()”(对于像“1”这样的字符串也返回true)。我建议使用:
<?php

    function foo(string $string) : bool {
        return is_numeric($string) && strpos($string, '.') !== false;
    }

?>

取而代之。

is_float()是检查类型而不是值是否可以强制转换为浮点数的函数 - 这就是类似于is_numeric()对整数的操作。 - undefined

2
也许你可以使用一些函数。
开箱即用。
function is_string_float($string) {
    if(is_numeric($string)) {
        $val = $string+0;

        return is_float($val);
    } 
      
    return false;
}

在PHP8中,这将会出错,因为不能对字符串和整数执行加法操作。 - Harry
@Harry 我相当确定 is_numeric 检查会确保 PHP 在执行加法运算之前将字符串视为整数(或浮点数)。 - georaldc
PHP 8.2只会对类似于echo "Z" + 0, "\n";的代码进行投诉。echo "1" + 0, "\n";会打印出1,而不会抛出任何异常。 - undefined

-1

这可以通过双重转换轻松实现。

/**
 * @param string $text
 * @return bool
 */
function is_string_float(string $text): bool
{
    return $text === (string) (float) $text;
}


不幸的是,这在像“0.000”这样的字符串上不起作用。 - Sundae

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接