制作ブログ Web制作マークアップphpパラメータ値が数字かどうか判別する

パラメータ値が数字かどうか判別する

https://simplesimples.com/search.html?p=xxxx

たとえば、こんなURLがあって、pの値が数字かどうか判別したいとき。
事前段階のパラメータの有無は isset で確認したとして、パラメータ値が「0-9」のみかどうか判別する正規表現を書くんだろうな、と想定したけど、もっと他の手段があったので備忘録。

is_int

「与えられた変数の型が整数型かどうかを検査します。」とのこと。でもパラメータ値は文字列として判断されるから注意。そこで is_numeric。

is_numeric

「指定した変数が数値であるかどうかを調べます。」とのこと。おー、いいじゃん。なのですが、たとえば下記はすべて numeric です。

  • “42”
  • 1337
  • 0x539
  • 02471
  • 0b10100111001
  • 1337e0
  • 9.1

正規表現

個人的な結論としては、パラメータ値が「0-9」のみかどうか判別する場合は、やっぱり正規表現で対応する。

if (preg_match(“/^[0-9]+$/“, htmlspecialchars($_GET[‘p’]))){
// 半角「0-9」のみです。
}

is_intを知れたらのは収穫でした。

ctype_digit

正規表現より処理が高速な方法を紹介している記事を見つけた。

if (ctype_digit(strval(htmlspecialchars($_GET[‘p’])))) {
// 半角「0-9」のみです。
}

ctype_digitは、引数が文字列かつすべて数字かどうか判別してくれる。引数が文字列以外はfalseを返してしまうので、数字の場合に備えて、strvalで文字列に変換している(URLのGETパラメータのみのチェックであれば、strvalメソッドは不要)。