2010-05-05 21 views
6

Is_numeric() cũng như is_int() trả về false nếu giá trị là 0. Tôi có thể làm gì để xác minh rằng giá trị cụ thể là số duy nhất trong PHP?PHP: Is_numeric trả về false trên 0

Có phải chúng ta đang đi thẳng đến trại Biểu thức thông thường hay có một số tính năng tiện dụng, tuyệt vời cho điều này không?

Cảm ơn!

+4

không repro, 'is_numeric (0)' trả về 'bool (true)' cho tôi. tương tự với 'is_int' – SilentGhost

+0

@Industrial: Bạn có chắc chắn không? http: //www.ideone.com/h5CSa – kennytm

+2

Bạn chắc chắn đó không phải là chữ cái O thay vì số không? –

Trả lời

0

Khởi động lại PHP trên máy chủ và nó hoạt động tốt ngay bây giờ. Không có ý tưởng về lý do tại sao nó mặc dù mặc dù. Cảm ơn tất cả mọi người vì sự giúp đỡ của họ!

5

Nó đang trở thành sự thật đối với tôi trong cả hai trường hợp:

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

Kết quả:

bool(true) 
bool(true) 
+0

Rất lạ. Không có ý tưởng về lý do tại sao môi trường thử nghiệm (cửa sổ) của tôi trả về false. – Industrial

0
var_dump(is_int("0")); 

sẽ vượt qua sai lầm bởi vì bạn đang đi qua nó là zero như là một chuỗi chữ. Bạn có thể thử truyền cùng một thứ như một biến đã trải qua (tôi tin) parseInt ("");

Mặc dù php của tôi có thể hơi bị gián đoạn, nhưng đã được Javascript không ngừng trong một hoặc hai tuần trước.

+1

Xin chào! Chuỗi không được chuyển thành chuỗi. – Industrial

+2

@Industrial đó là một nghịch lý;) – Gordon

+1

@Gordon Duuh. Đó là một trong những bức tường của sự nổi tiếng chắc chắn. Giá trị được chuyển không phải là một chuỗi, mà chỉ là một số. Tôi hy vọng điều đó sẽ dễ hiểu;) – Industrial

1

Không, dưới dạng số nguyên trống. Vì vậy, đảm bảo rằng không có kiểm tra trống trước khi bạn kiểm tra Is_numeric() hoặc is_int()

+0

Cảm ơn! đáng ngạc nhiên đó là chính xác những gì tôi đã làm! :) –

0

Khi bạn đang xử lý REQUEST, hãy kiểm tra đầu vào trước bằng cách sử dụng filter_input. Đây là một ví dụ kiểm tra 'id' từ $ _GET.

filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT) 

đầy đủ ví dụ

if (is_int(filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))) { 
     $id = $_GET['id']; 
} else { 
     die('please input a integer'); 
} 

Vâng, tính năng đưa ra phiên bản PHP> = 5.2.

0

Tôi đã gặp khó khăn về cùng một vấn đề, và nó cho rằng có một khoảng trống sau số đó.

dài câu chuyện ngắn, những gì bao giờ số lượng là:

is_numeric(" 0.0") --> YES 
is_numeric("0.0 ") --> NO 

Dưới đây là một ví dụ ...

public function getCoordinates() 
{ 
    return sprintf('%1$f , %2$f',$this->getLatitude(),$this->getLongitude()); 
} 

Sau đó trong quá trình ...

 $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>"; 

in trên màn hình:

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

Điều này cũng có thể xảy ra nếu điều này 0 là một thực tế boolean FALSE. is_numeric() luôn trả về FALSE cho boolean.

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

Định dạng câu trả lời của bạn đúng cách và bạn thực sự không cần phải trả lời câu hỏi 7 năm có câu trả lời được chấp nhận. – Sand

+0

Không chỉ câu trả lời này không có ý nghĩa, có lỗi cú pháp để khởi động. – Antti29