https://sample27.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メソッドは不要)。