2013-04-17 130 views
2

下面的函數檢查字符串是否爲整數,意味着它只應包含數字。但它不檢查數字是否爲負數(負數也應該返回true,因爲它們是整數)。檢查字符串是否爲整數(包括負數)PHP

function validateInteger($value) 
{ 
    //need is_numeric to avoid $value = true returns true with preg_match 
    return is_numeric($value) && preg_match('/^\d+$/', $value); 
} 

我跑測試,並得到了結果:

'12.5'  => FALSE 
12.5  => FALSE 
'a125'  => FALSE 
'125a'  => FALSE 
'1a2.5'  => FALSE 
125   => TRUE 
'abc'  => FALSE 
false  => FALSE 
true  => FALSE 
'false'  => FALSE 
'true'  => FALSE 
null  => FALSE 
'null'  => FALSE 
'1231'  => TRUE 
-1231  => FALSE (SHOULD RETURN TRUE) 
'-1231'  => FALSE (SHOULD RETURN TRUE) 

我不想使用itnval() < 0。我寧願用正則表達式來檢查負數。

感謝

編輯:

我也有一個功能validateFloat如果給定的數字是浮點數這意味着它只能包含數字返回true。我需要對此應用相同的邏輯,以便它對於負浮點數返回true

回答

1

只是使用is_numeric(abs($val))

+1

abs($ val)返回一個數字,如果$ val = null,false,true等... – GGio

+0

@GGio然後'is_numeric($ val)&& is_numeric(abs($ val))' – raidenace

+0

我DownVote:'is_numeric(abs('125a')) '導致誤報。 – codekandis

4

is_int對您來說不夠好嗎?

filter_var($input, FILTER_VALIDATE_INT)應該具有相同的效果,但也適用於字符串。

+0

但如果value是一個字符串但包含所有數字,則返回false。在我的情況下,'125'和'-1231'將返回錯誤 – GGio

+0

如果$ input = true,filter_var($ input,FILTER_VALIDATE_INT)返回true。它應該是假的 – GGio

+0

@GGio嘗試添加選項'FILTER_NULL_ON_FAILURE' –

相關問題