数値かどうか調べる(ctype_digitとis_numeric、正規表現)

PHP

PHPの関数で、引数が数値かどうかを調べる方法を紹介しちゃいます。

ctype_digit

ctype_digit( A )

※Aは文字列

引数に指定された文字列Aの全ての文字が数字かどうかを調べ、全ての文字が10進数の整数だったらTRUE、そうでなかったらFALSEを返します。

■ctype_digitを使用した文字列チェックプログラムの例

<?php
  $chk_array = array(3150, 890.29, 'text text', 0xf4c3b00c);
  foreach ($chk_array as $val) {
    if (ctype_digit($val)) {
      echo "{$val}は整数です。";
    } else {
      echo "{$val}は整数ではありません。";
    }
  }
?>

■実行結果

3150は整数です。
890.29は整数ではありません。
text textは整数ではありません。
4106465292は整数です。

※「0xf4c3b00c」は16進数で、10進数だと「4106465292」となります。

便利な「ctype_digit」関数ですが、なんと…落とし穴があります。
下記の例を見てください…!

ctype_digit('3');    // TRUEを返却
ctype_digit(3);      // FALSEを返却
ctype_digit('3.3');  // FALSEを返却

引数が文字列型じゃないと、想定している結果が返ってきませんね。。
「ctype_digit」関数はあくまでも文字列を調べる関数なので、
引数はクォート「’ ‘」して調べましょう。

変数が数値かどうかを判定するには、is_numeric関数を使います。

is_numeric

is_numeric( A )

※Aは数値

数値または数値文字列の場合はTRUE、それ以外の場合はFALSEを返します。

■is_numericを使用した数値チェックプログラムの例

<?php
  $chk_array = array(3150, 890.29, 'text text', 0xf4c3b00c);
  foreach ($chk_array as $val) {
    if (is_numeric($val)) {
      echo "{$val}は数値です。";
    } else {
      echo "{$val}は数値ではありません。";
    }
  }
?>

■実行結果

3150は数値です。
890.29は数値です。
text textは数値ではありません。
4106465292は数値です。

16進表記「0xf4c3b00c」や2進表記「111001」なども数値として認識します。これは変数が整数かどうかを調べる「is_int」も同様で、16進数や2進数を整数値として判定します。

それでは、最後に正規表現を利用した判定方法を紹介します。

■正規表現を利用した10進数の整数値判定

<?php
  $chk_array = array(3150, 890.29, 'text text', 0xf4c3b00c);
  foreach ($chk_array as $key => $val) {
    if (preg_match("/^[0-9]+$/", $val)) {
      echo "{$val}は整数です。";
    } else {
      echo "{$val}は整数ではありません。";
    }
  }
?>

3150は整数です。
890.29は整数ではありません。
text textは整数ではありません。
4106465292は整数です。

ややこししいですね。。

タイトルとURLをコピーしました