2012-11-21 46 views
6

tôi có thể sử dụng intval, nhưng theo tài liệu:Cách phân tích cú pháp một số nguyên trong PHP?

Strings rất có thể sẽ trở lại 0 mặc dù điều này phụ thuộc vào ký tự tận cùng bên trái của chuỗi. Các quy tắc phổ biến của số nguyên đúc áp dụng.

... và giá trị để phân tích cú pháp có thể là 0, nghĩa là tôi sẽ không thể phân biệt giữa 0 và số fax.

$value1 = '0'; 
$value2 = '15'; 
$value3 = 'foo'; // Should throw an exeption 

câu hỏi Real là: làm thế nào tôi có thể phân tích các chuỗi và phân biệt giữa một string rằng đúc để 0 và một số không chính nó?

+0

Làm thế nào bảo thủ làm bạn cần phải? intval hoạt động tốt, nhưng nếu bạn mong đợi chuỗi chứa các giá trị không phải số và bạn cần phải PRESERVE các giá trị số, bạn sẽ muốn chạy nó thông qua một preg_replace trước tiên. Chuỗi –

+0

@cale_b phải là tất cả các số được truyền. – gremo

Trả lời

8

Trong đoạn mã dưới đây, $int_value sẽ được thiết lập để null nếu $value không phải là một chuỗi số thực tế (cơ sở 10 và tích cực), nếu không nó sẽ được thiết lập với giá trị số nguyên của $value:

$int_value = ctype_digit($value) ? intval($value) : null; 
if ($int_value === null) 
{ 
    // $value wasn't all numeric 
} 
+0

Hãy thử nó, cảm ơn. – gremo

+1

Không hoạt động trên số nguyên âm ("-" không phải là chữ số) – data

0

Tôi đã không đánh giá cao so với ctype_digit(), nhưng tôi nghĩ rằng sau đây là một lựa chọn tốt đẹp. Tất nhiên nó phụ thuộc vào hành vi chính xác mà bạn mong đợi.

function parseIntOrException($val) { 
    $int = (int)$val; 
    if ((string)$int === (string)$val) { 
    throw \Exception('Nope.'); 
    } 
    return $int; 
} 

http://3v4l.org/Tf8nh

1  1 
'2'  2 
'3.0' false 
4.0  4 
5  5 
Các vấn đề liên quan