2012-02-25 51 views
0

我有一個得到的網址輸入,我需要將它傳遞到databse,但在此之前,因爲我知道用戶ID將始終是一個整數,我想過濾掉一切,但數字在PHP 。下面的代碼就是我想出來的,有沒有人知道比這更好的方法?或者這是正確的方式?篩選一切,但號碼

$id = preg_replace('#[^0-9]#i', '', $_GET['id']); 

回答

5

克拉(^)的內部裝置NOT。 I.E.不是0到9之間的字符。我們需要刪除它。另外,i表示正則表達式爲不區分大小寫;我們不需要擔心,因爲數字沒有其他字符的情況。

我們需要選擇我們想要保留的部分。括號用於此。第二個參數需要包含對我們要替換字符串的部分的引用(在存儲在$id之前)。所以整個函數調用是這樣的:

$id = preg_replace('#([0-9]+)#', '\1', $_GET['id']); 

+只是意味着將有多個數字。

然後,您可以使用is_int()以確保函數調用的結果,其實是一個INT,因爲如果該函數發現沒有數字它只會返回$_GET['id']值。

$id = preg_replace('#([0-9]+)#', '\1', $_GET['id']); 
if(is_int($id)) 
{ 
    //insert to DB 
} 
+0

is_int()是非常有趣的,我正在尋找,但未能找到它... – 2012-02-25 22:01:33

+0

你怎麼看待這個: 的$ id = filter_input(INPUT_GET,ID,FILTER_SANITIZE_NUMBER_INT); – 2012-02-25 22:20:13

+1

它會從'1sada + sda2fdasddsa2sasd34a'返回'1 + 234',而我的代碼只返回'34'。 'FILTER_SANITIZE_NUMBER_INT'刪除除數字和加號和減號以外的所有字符,然後將它們粘在一起,而我的代碼在一行中取第一個數字/數字塊序列。使用該功能可以更容易地檢查它是否失敗;你只需要'if(!$ id){/ * error * /} else {/ * insert to DB * /}'。不需要'is_int()'。 – 2012-02-25 23:11:23

0

如果您匹配的數字,你不需要我的選項。你的模式只能匹配1位數字。我建議是這樣

#[0-9]+# 

得到的數字位數任意長度,而忽略其他任何東西。

0

或者這樣:

$id = preg_replace('/\D/', '', $_GET['id']);