2010-05-05 92 views
6

Is_numeric()以及is_int()如果值为0,则返回false。我可以做些什么来验证特定值是否只是PHP中的数字?PHP:Is_numeric在0上返回false

我们是否直奔正规表达阵营,还是有一些不错的,方便的功能呢?

谢谢!

+4

no repro,'is_numeric(0)'为我返回'bool(true)'。与'is_int'相同 – SilentGhost 2010-05-05 15:17:50

+0

@Industrial:你确定吗? HTTP://www.ideone。com/h5CSa – kennytm 2010-05-05 15:18:35

+2

你确定它不是一个字母O而不是一个零? – 2010-05-05 15:18:37

回答

0

重新启动服务器上的PHP,现在运行良好。不知道为什么它发生。谢谢大家的帮助!

5

这是在两种情况下返回我真:

var_dump(is_numeric(0)); 
var_dump(is_int(0)); 

结果:

bool(true) 
bool(true) 
+0

很奇怪。不知道为什么我的测试(Windows)环境确实返回false。 – Industrial 2010-05-05 15:23:03

0
var_dump(is_int("0")); 

将通过假的,因为你是零把它当作一个字符串。你可以尝试传递一个经历过的变量(我相信)parseInt(“”);

虽然我的php可能有点关闭,在上个星期或上两个星期不停地进行JavaScript脚本编程。

+1

嗨!该字符串不作为字符串传递。 – Industrial 2010-05-05 15:26:11

+2

@Industrial这是一个悖论;) – Gordon 2010-05-05 15:29:08

+1

@ Gordon Duuh。那绝对是名气之墙。传递的值不是一个字符串,而只是一个数字。我希望这可以理解;) – Industrial 2010-05-05 21:02:23

1

零,因为整数是空的。 因此,在检查Is_numeric()或is_int()之前,确保没有空的检查。

+0

谢谢!令人惊讶的是,这正是我正在做的! :) – 2016-12-23 06:55:16

0

当您处理REQUEST时,最好先使用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。

0

我在同样的问题上苦苦挣扎,它碰巧在号码后面有一个空格。

长话短说,什么都数为:

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 
0

这也可能发生,如果这0实际上是一个布尔FALSEis_numeric()对于布尔值总是返回FALSE

0
if($price != 0) { 
    if(is_numeric($price)) { 
     $price = $price; // numeric 
    } else { // is not numeric } 
} else { 
    $price = $price; // 0 as numeric 
} 
+0

格式化你的答案,你真的不需要回答一个7岁的问题,碰巧有一个接受的答案。 – Sand 2017-10-02 05:51:19

+0

这个答案不仅没有意义,还有一个语法错误引导。 – Antti29 2017-10-02 07:09:35