みなさん、こんばんはべーっだ!
今日もいい天気で、本当に気持ちいですね音譜

さて、今日は数値かどうかのエラーチェックをする際の注意点を紹介したいと思います爆弾

1.正規表現を使う方法(\d+)
2.ctype_digit関数を使う方法
3.is_numeric関数を使う方法

上記のように値が数値かどうかをチェックする方法はいくつかあるのですが
(私はいつも1の方法でエラーチェックをしています。)

10進数の値を3の方法でチェックを行う場合は注意が必要です。。
以下プログラムをみてみましょう。

=========================================================

var_dump(is_numeric(1.1));
var_dump(is_numeric(-1));


<実行結果>
bool(true) bool(true)

=========================================================

結果をみてみると、小数点の値や負の値も
「true」(数値ですよ)という結果になってしまっていますね。。

10進数の値をエラーチェックする場合は
1の方法でチェックすることをお勧めします。
以下サンプルプログラムです。
=========================================================

$val = 1.1;

if (preg_match("/^\d+$/", $val)) {
echo($val . "は10進数ですよ");
} else {
echo($val . "は10進数じゃないですね。。");
}

<実行結果>
1.1は10進数じゃないですね。。

=========================================================

ちゃんとエラーチェックができていますね音譜

ちなみにこの内容は以下URLに詳しく書かれています。
http://openlab.dino.co.jp/2007/11/23/121351149.html

もしis_numericでエラーチェックを行っている場合は
上記の挙動があることを考慮して使うよう心がけましょう。

2の方法(ctype_digit)でエラーチェックする方法もあるのですが
バージョンによって(5.1.0)おかしな挙動をするので
PHPのバージョンを確認してから使うことをお勧めします。

それではチョキ