is_numeric()
和is_int()
会在值为0时返回false。在PHP中,要验证特定的值是否只包含数字,可以使用正则表达式吗?还是已经有一些方便的功能来实现了呢?
谢谢!
在我的情况下,它在两种情况下都返回true:
var_dump(is_numeric(0));
var_dump(is_int(0));
结果:
bool(true)
bool(true)
整数零是空的。 因此,在检查Is_numeric()或is_int()之前,请确保没有检查空。
我曾经遇到过同样的问题,结果发现数字后面有一个空格。
长话短说,无论数字是多少:
is_numeric(" 0.0") --> YES
is_numeric("0.0 ") --> NO
这里是一个例子...
public function getCoordinates()
{
return sprintf('%1$f , %2$f',$this->getLatitude(),$this->getLongitude());
}
在后续的过程中...
$myarr = explode(",",$_ScreenCoordinates);
echo "_ScreenCoordinates:$_ScreenCoordinates<br>";
echo "myarr[0]:".$myarr[0]." - ".((is_numeric($myarr[0]))?"YES":"NO")."<br>";
echo "myarr[1]:".$myarr[1]." - ".((is_numeric($myarr[1]))?"YES":"NO")."<br>";
echo "trimmed[0]:".$myarr[0]." - ".((is_numeric(trim($myarr[0])))?"YES":"NO")."<br>";
在屏幕上打印:
Array ( [0] => 1.200000 [1] => 123.456000 )
_ScreenCoordinates:1.200000 , 123.456000
myarr[0]:*1.200000 * - NO
myarr[1]:* 123.456000* - YES
trimmed[0]:*1.200000 * - YES
var_dump(is_int("0"));
会返回 false,因为你将零作为字符串文字传递给它。你可以尝试将相同的内容作为变量传递,该变量已经通过(我相信)parseInt("")处理过。
虽然我的 PHP 可能有点问题,因为最近一两周一直在编写 JavaScript。
如果这个0
实际上是一个布尔值FALSE
,也会发生这种情况。
对于布尔值,is_numeric()
总是返回FALSE
。
当你处理请求时,最好先使用filter_input检查输入。以下是一个例子,检查$_GET中的'id'。
filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT)
完整的示例
if (is_int(filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))) {
$id = $_GET['id'];
} else {
die('please input a integer');
}
好的,该功能适用于PHP版本>=5.2。
if($price != 0) {
if(is_numeric($price)) {
$price = $price; // numeric
} else { // is not numeric }
} else {
$price = $price; // 0 as numeric
}
is_numeric(0)
返回bool(true)
。同样适用于is_int
。 - SilentGhost