我正在寻找一个可以帮助我验证数字的 PHP 函数。我发现的是is_numeric()
和is_float()
PHP。
这适用于数值和浮点数,但不验证负数。
我要验证的数字是
12345
,
12345.6789
,
0
,
-12345.6789
,
-12345
我正在寻找一个可以帮助我验证数字的 PHP 函数。我发现的是is_numeric()
和is_float()
PHP。
这适用于数值和浮点数,但不验证负数。
我要验证的数字是
12345
,
12345.6789
,
0
,
-12345.6789
,
-12345
is_numeric
1e10
对于您提供的所有输入都可以正常工作(它也将接受输入,例如0xff
)。
您可能会发现使用它会更好filter_var
:
$value = filter_var($input, FILTER_VALIDATE_FLOAT);
if ($value !== false) {
// was a valid float, do something with it
}
这仍然接受1e10
,但它不会接受0xff
等。
您可以使用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_var
Jon 推荐的
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
过滤器变量很棒,但我遇到了一个严重的问题,它在 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'));