2012-02-25 6 views
0

私はdatabseに渡す必要があるget url入力を持っていますが、ユーザIDが常に整数であることを知って以来、これを行う前に、 。次のコードは、私が思いついたものです。誰もこれよりも良い方法を知っていますか?またはこれは正しい方法ですか?数字以外のすべてをフィルタリングする

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

答えて

5

カラット(^)が内部NOTを意味します。 I. 0〜9を含む文字ではありません。私たちはそれを取り除く必要があります。また、iは、正規表現がで、大文字と小文字を区別しないことを意味します。;数字には他の文字のような大文字と小文字の区別がないため、心配する必要はありません。

私たちが保持したい部分を選択する必要があります。大括弧はこれに使用されます。 2番目のパラメータには、文字列を置換する部分への参照が含まれている必要があります(格納する前に$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()は、私はそれを探していた、非常に興味深いですが、それを見つけることができませんでした... –

+0

あなたはこれをどう思いますか: ます$ id = filter_input(INPUT_GET、ID、FILTER_SANITIZE_NUMBER_INT)。 –

+1

'1sada + sda2fdasddsa2sasd34a'から' 1 + 234'を返しますが、私のコードは '34'しか返しません。 'FILTER_SANITIZE_NUMBER_INT'は、数字とプラス記号とマイナス記号を除くすべての文字を削除し、それをすべて貼り付けますが、私のコードは最初の列の数字/行の数字ブロックを取ります。この機能を使用すると、障害が発生したかどうかを確認するのが簡単になります。あなたは 'if(!$ id){/ * error * /} else {/ * insert to DB * /}'を持つだけです。 'is_int()'の必要はありません。 –

0

数字が一致する場合はiオプションは必要ありません。あなたのパターンは1桁の数値にしか一致しません。

#[0-9]+# 

何か他のものを無視して、数字の長さを取得することをお勧めします。

0

またはこの:

$id = preg_replace('/\D/', '', $_GET['id']); 
関連する問題