PHPの関数で、引数が数値かどうかを調べる方法を紹介しちゃいます。
ctype_digit
1 | ctype_digit( A ) |
※Aは文字列
引数に指定された文字列Aの全ての文字が数字かどうかを調べ、全ての文字が10進数の整数だったらTRUE、そうでなかったらFALSEを返します。
■ctype_digitを使用した文字列チェックプログラムの例
1 2 3 4 5 6 7 8 9 10 | <?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」関数ですが、なんと・・・落とし穴があります。
下記の例を見てください・・・!
1 2 3 | ctype_digit( '3' ); // TRUEを返却 ctype_digit(3); // FALSEを返却 ctype_digit( '3.3' ); // FALSEを返却 |
引数が文字列型じゃないと、想定している結果が返ってきませんね。。
「ctype_digit」関数はあくまでも文字列を調べる関数なので、
引数はクォート「' '」して調べましょう。
変数が数値かどうかを判定するには、is_numeric関数を使います。
is_numeric
1 | is_numeric ( A ) |
※Aは数値
数値または数値文字列の場合はTRUE、それ以外の場合はFALSEを返します。
■is_numericを使用した数値チェックプログラムの例
1 2 3 4 5 6 7 8 9 10 | <?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進数の整数値判定
1 2 3 4 5 6 7 8 9 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は整数です。
ややこししいですね。。