2012-09-29 315 views
13

可能重複:
Check if a variable is a natural numberPHP的等價JavaScript的parseInt函數?

對面,我需要清理的輸入,並用PHP刪除所有非數字字符剛剛來到。想到自己做一個功能,但是首先想要檢查可能的內置功能,所以我不必花費額外的時間來重新發明輪子。

+0

檢查[php.net/Type Casting](http://php.net/manual/en/language.types.type-juggling.php) – air4x

+0

爲什麼不只是使用intval? – endy

回答

23

您可以使用正則表達式如下

$int = (int) preg_replace('/\D/', '', $strNonNumeric); 

OR

$int = (int) preg_replace('/[^0-9]/', '', $strNonNumeric); 
+0

啊,正是我想要的。非常感謝。 – think123

+2

@ think123 - 值得指出的是(a)這不會產生一個int;它仍然是一個字符串,雖然只包含數字,並且(b)正則表達式對於這種情況是過度的。 – Spudley

+1

確實如此,但這是實際工作的人之一。我將編輯它一切。 – think123

2

您可以使用:

$string = "90"; //string 
$myInt = (int) $string; //parse to int 
+0

對不起,但那不完全是我想要的。 '(int)'不會刪除所有的非數字字符,如果字符串中有非數字字符,它將返回'0'。 – think123

+2

@ think123:在javascript中,類型轉換'(int)'和'parseInt()'的作用相同。這是你問的,不是嗎? –

0

您還可以使用sscanf的(就像在C做)

<?php 

    $str = "10"; 

    sscanf($str, "%d", $intVal); 
    $intVal *= 10; 

    echo $intVal; 
?> 

輸出:

3

我會建議使用FILTER_VALIDATE_INT過濾器。

about Filters on php.net

+0

-1請不要放置w3schools鏈接。把一個'php.net'代替,我會給你回票。按照保證, – think123

+1

+2給你你的投票。 – think123

+3

哦,只是爲了某種原因:http://www.w3fools.com – think123

19

沒有直接等同於pareseInt()在PHP因爲PHP沒有NaN數據類型。如果該值無法解析,parseInt()將產生NaN

另外,parseInt()有基數參數,這些PHP選項都不給你。

雖如此,但如果你想要做的是把一個字符串轉換成整數,那麼有幾種選擇:

$int = (int)$string; 

$int = intval($string); 

$int = settype($string,'integer'); 

這三個將在大致相同的方式工作的。可能存在一些邊界情況,其中intval()與其他兩個不同,但通常它們會將字符串轉換爲int。在沒有NaN的情況下,如果字符串是非數字並且不能被分析,則它們全部輸出0(零)。但是這對於大多數DB衛生目的應該是足夠的。

如果你真的想要一個在NaN上的錯誤,你會得到最接近的是null。您可以使用filter_var()得到這樣的:

$value = filter_var(FALSE, FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); 

如果你只是想檢查該字符串的數字,該is_numeric()功能可以做到這一點:

$bool = is_numeric($string); 

然而,返回小數真實,也爲科學記數法,因此在大多數情況下可能並不完美。更好的選擇是ctype_digit()如果字符串僅由數字返回true:

$bool = ctype_digit($string); 

如果這個套裝的非E,總有正則表達式的選項,使用preg_match()preg_replace(),但這些肯定是矯枉過正這種情況。

+0

使用(int)和intval()是非常錯誤的,但要注意,如果字符串表示浮點數(即有小數) ,那麼這些功能只是刪除點後的任何東西。所以「3.999」變成3. – Wytze

+0

@Wytze:是的,但問題是要求刪除非數字字符,所以假設它不是小數。如果您需要處理小數,還有其他選項。 – Spudley