私はdatabseに渡す必要があるget url入力を持っていますが、ユーザIDが常に整数であることを知って以来、これを行う前に、 。次のコードは、私が思いついたものです。誰もこれよりも良い方法を知っていますか?またはこれは正しい方法ですか?数字以外のすべてをフィルタリングする
$id = preg_replace('#[^0-9]#i', '', $_GET['id']);
私はdatabseに渡す必要があるget url入力を持っていますが、ユーザIDが常に整数であることを知って以来、これを行う前に、 。次のコードは、私が思いついたものです。誰もこれよりも良い方法を知っていますか?またはこれは正しい方法ですか?数字以外のすべてをフィルタリングする
$id = preg_replace('#[^0-9]#i', '', $_GET['id']);
号
カラット(^
)が内部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
}
数字が一致する場合はiオプションは必要ありません。あなたのパターンは1桁の数値にしか一致しません。
#[0-9]+#
何か他のものを無視して、数字の長さを取得することをお勧めします。
またはこの:
$id = preg_replace('/\D/', '', $_GET['id']);
is_int()は、私はそれを探していた、非常に興味深いですが、それを見つけることができませんでした... –
あなたはこれをどう思いますか: ます$ id = filter_input(INPUT_GET、ID、FILTER_SANITIZE_NUMBER_INT)。 –
'1sada + sda2fdasddsa2sasd34a'から' 1 + 234'を返しますが、私のコードは '34'しか返しません。 'FILTER_SANITIZE_NUMBER_INT'は、数字とプラス記号とマイナス記号を除くすべての文字を削除し、それをすべて貼り付けますが、私のコードは最初の列の数字/行の数字ブロックを取ります。この機能を使用すると、障害が発生したかどうかを確認するのが簡単になります。あなたは 'if(!$ id){/ * error * /} else {/ * insert to DB * /}'を持つだけです。 'is_int()'の必要はありません。 –