データベースに渡す必要がある get url 入力がありますが、それを行う前に、ユーザー ID は常に整数であることがわかっているため、php の数値以外をすべて除外したいと考えていました。次のコードは私が思いついたものですが、これよりも良い方法を知っている人はいますか? またはこれは正しい方法ですか?
$id = preg_replace('#[^0-9]#i', '', $_GET['id']);
データベースに渡す必要がある get url 入力がありますが、それを行う前に、ユーザー ID は常に整数であることがわかっているため、php の数値以外をすべて除外したいと考えていました。次のコードは私が思いついたものですが、これよりも良い方法を知っている人はいますか? またはこれは正しい方法ですか?
$id = preg_replace('#[^0-9]#i', '', $_GET['id']);
いいえ。
中のカラット(^
)は を意味しNOT
ます。IE は 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']);