[PHP]フォームからの入力値が正の整数か判別する

PHPでの整数値か否かの判別、is_int()でいいじゃんと思ってたらダメだった。

PHPマニュアルのis_int()の解説より抜粋↓

変数が数値もしくは数値形式の文字列の場合 (フォームからの入力の場合は
常に文字列となります) 、 is_numeric()
を使用する必要があります。

整数か判別したい場合というのはフォームからの入力値の場合が多いだけど、is_int()では、フォームからの入力値の全てにfalseを返してしまう。

では、is_numeric()ならいいのかというと、整数の判別の場合には問題がある。is_numeric()は、小数や負の数、16進表記(0xFF等)にもtrueを返してしまう。整数だけ判別したい。それも、できるだけ楽して。どうするか?

ctype_digit(strval($input))

というのが、現在の私の答え。ctype_digit()は、与えられた文字列のすべての文字が数字であるかどうかを調べる。

ctype_digit('1') // true
ctype_digit(1) // false
ctype_digit('-1') // false
ctype_digit('1.1') // false
ctype_digit('0xff') // false

引数が文字列でない場合はfalseが返るので、strval()で文字列に変換している。

13/2/25追記

手軽といえば、正規表現を使うのが一番手軽かも。preg_match(‘/[^0-9]/’, $input) でも、ctype_digit(strval($input)) と同じ判定をできる。ただし、ctype_digit(strval($input)) とpreg_match(‘/[^0-9]/’, $input) を比較すると、ctype_digitの方が67%ほど速い。

コメントをどうぞ

コメントを残す