整数かどうか s_numeric,is_int,ctype_digit (PHP)


以前数値かどうか?というエントリで記述したようにPHPでの数値かどうかの判定にはis_intが使えると書きました。他にもctype_digitという関数があるのですが、この関数は”文字列”が”数字”かどうかを判定するので、string型で用いるのが前提になっています。つまり、float型はもちろん、int型もすべてfalseと判断されます。
いくつかの例でテストした結果を一覧表にしてみました。(PHPのバージョンは5.2.5)

元データ var_dump() is_numeric() is_int() ctype_digit()
“abc” string(3) “abc” bool(false) bool(false) bool(false)
“123” string(3) “123” bool(true) bool(false) bool(true)
“0123” string(4) “0123” bool(true) bool(false) bool(true)
“.0123” string(5) “.0123” bool(true) bool(false) bool(false)
“0.123” string(5) “0.123” bool(true) bool(false) bool(false)
“0e3” string(3) “0e3” bool(true) bool(false) bool(false)
“0a3” string(3) “0a3” bool(false) bool(false) bool(false)
“0x12” string(4) “0x12” bool(true) bool(false) bool(false)
abc string(3) “abc” bool(false) bool(false) bool(false)
123 int(123) bool(true) bool(true) bool(false)
0123 int(83) bool(true) bool(true) bool(false)
.0123 float(0.0123) bool(true) bool(false) bool(false)
0.123 float(0.123) bool(true) bool(false) bool(false)
0e3 float(0) bool(true) bool(false) bool(false)
xabc string(4) “xabc” bool(false) bool(false) bool(false)
0x12 int(18) bool(true) bool(true) bool(false)

is_numericは文字列型、数値型ともに対応し、整数、小数、16進数、科学記法をtrueと判定します。
is_intは数値型を前提とし、文字列型には対応しません。16進数はtrueです。
ctype_digitは文字列型を前提とします。”0123″もtrueと判定します。

intvalで文字列を数値に変換することはできますが、変換できない場合は0となるので、is_intではtrueと判断されてしまいます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

SPAM防止のため数字と漢数字の算数の計算をお願いします。 * Time limit is exhausted. Please reload CAPTCHA.