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