中級者向け:数の判定について

2024/06/27に公開

is_int() 整数を判定する

  • intintegerの略
  • 整数を判定する
  • 整数ならtrue、少数ならfalse、もちろん負数もtrue
  • 文字列型は整数でもfalse ← 重要❗
var_dump( is_int(0)   ); // true
var_dump( is_int(1)   ); // true
var_dump( is_int(-1)  ); // true
var_dump( is_int('1') ); // false
var_dump( is_int(1.1) ); // false

文字列型は全てfalseになることに注意すること。(C言語のint型の判定と同等)
通常のフォームによるPOSTとGETメソッドの送信では、全て文字列型になる。
データベースから取得した値や、JSONで送信された値、プログラム内で初期化した変数の判定に使う。

is_numeric() 一般的な数値を判定する(数値型ではない)

  • 整数はtrue
  • 少数もtrue
  • 文字列型の分数や指数はfalse
var_dump( is_numeric(0)   ); // true
var_dump( is_numeric(-1)  ); // true
var_dump( is_numeric('0') ); // true
var_dump( is_numeric(1.0) ); // true
var_dump( is_numeric('a') ); // false

悩むケース:正の整数で、少数ではない数

GETやPOSTで送信されてきた値(文字列型)で、「正の整数で少数ではない数」を求める時に悩みます。
これは組み合わせて判定します。

foreach( [1, '1', '0', 0.1, -1] as $n ){
  var_dump( is_numeric($n) and !is_float($n) and $n > 0 );
}

正規表現で求めることもできます

foreach( [1, '1', '0', 0.1, -1] as $n ){
  var_dump( preg_match('/^[0-9]+$/', $n) and $n );
}

Discussion