-7

我正在寻找一个可以帮助我验证数字的 PHP 函数。我发现的是is_numeric()is_float()PHP。

这适用于数值和浮点数,但不验证负数。

我要验证的数字是 12345, 12345.6789, 0, -12345.6789, -12345

4

3 回答 3

6

is_numeric1e10对于您提供的所有输入都可以正常工作(它也将接受输入,例如0xff)。

您可能会发现使用它会更好filter_var

$value = filter_var($input, FILTER_VALIDATE_FLOAT);
if ($value !== false) {
    // was a valid float, do something with it
}

这仍然接受1e10,但它不会接受0xff等。

于 2012-10-05T09:40:59.257 回答
5

您可以使用is_numeric

$list = array("1e4",12345,12345.6789,0,- 12345.6789,- 12345,'0xa');

foreach ( $list as $value ) {
    var_dump(is_numeric($value));
}

输出

boolean true
boolean true
boolean true
boolean true
boolean true
boolean true
boolean true
          ^--  This should not be true 

* 笔记 *

is_numeric不是 100% 可靠的,你应该使用filter_varJon 推荐的

foreach ( $list as $value ) {
    var_dump(is_float(filter_var($value, FILTER_VALIDATE_FLOAT)));
}

输出

boolean true
boolean true
boolean true
boolean true
boolean true
boolean true
boolean false  
         ^--  can you see its false 
于 2012-10-05T09:41:11.027 回答
0

过滤器变量很棒,但我遇到了一个严重的问题,它在 0 时返回 false,所以这将解决这个问题。它接受所有实数,因此 als 在 '0xa' 上返回 false

(filter_var($n,FILTER_VALIDATE_FLOAT) || ($n===0) || ($n==='0'));

如果你只想要整数

(filter_var($i,FILTER_VALIDATE_INT) || ($i===0) || ($i==='0'));

于 2014-05-19T08:10:42.993 回答