以前数値かどうか?というエントリで記述したように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と判断されてしまいます。