2010-05-05 87 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

相關問題