PHPで数値をチェックする4つの方法を比較

  • このエントリーをはてなブックマークに追加
  • Pocket

スポンサードリンク

PHPで数値なのかをチェックする方法はis_numeric()での判定とpreg_match()を使った正規表現での判定が多いですが、それぞれ判定がゆるかったり、処理が多少重いなど特長があります。

数値型しかtrue判定しない厳密な関数や、数値判定に特化した関数など、4パターンご紹介します。

使いたい目的にあったものをチョイスしていきましょう。

 

それでは、それぞれの関数で型ごとにどのような判定になるか見ていきましょう。

is_numeric関数

数字または数値形式の文字列か調べます。

文字列型でも小数点でも数値ならOK!(true)判定してくれます。

is_numericで数値チェック

is_numericの判定

文字列string => OK!
整数int => OK!
小数float => OK!

文字列も整数も浮動小数点も全部OK!(true)判定してくれました。

is_int関数

整数(int)型か調べてくれます。

数値でも文字列型だとダメ!(false)判定なので、厳しいです。

is_intでint型かチェック

is_intの判定

文字列string => ダメ!
整数int => OK!
小数float => ダメ!

整数だけOK!(true)で文字列や小数点はダメ!(false)でした。

HTMLフォームからPOSTされた数値は文字列型なので、in_int()ではバリデートできません。

厳密にint型かを判定する場合に使用しましょう。

preg_match関数

正規表現で自由に数値チェックできます。

preg_matchの正規表現での数値判チェック

preg_matchの判定

文字列string => OK!
整数int => OK!
小数float => ダメ!

preg_match()は記述した正規表現によって変わってきますが、小数を除く数値であれば文字列型、int型問わず判定してくれます。

この方法はメジャーですが、preg_match()による正規表現の処理は重いからと避ける人もいるようです。

ctype_digit関数

文字列が数字かどうか調べてくれます。

文字列を判定する関数で、整数int型だとfalse判定になるこることもあるため、文字列のみを指定するようにしましょう。

ctype_digitで数字かチェック

ctype_digitの判定

文字列string => OK!
整数int => ダメ!
小数float => ダメ!

文字列型の整数であればOK!(true)、小数点は文字列でもダメ!(false)となります。

int型だと255文字以下では一部数値を除いてダメ!(false)になることが多く、256文字以上はOK!(true)となりますが、基本的には文字列型での判定のみに使用すべきでしょう。

HTMLフォームからPOSTされた数値であれば文字列型となるため、バリデーションには使えますね。

数値チェックのまとめ

数値チェックの方法を4タイプ見ていきましたが、以下の一覧表にまとめました。

数値チェック一覧表

関数名文字列(string)型
'255'
整数(int)型
255
浮動小数点(float)型
255.99
is_numericOK!
(TRUE)
OK!
(TRUE)
OK!
(TRUE)
is_intダメ!
(FALSE)
OK!
(TRUE)
ダメ!
(FALSE)
preg_match
(/^[0-9]+$/)
OK!
(TRUE)
OK!
(TRUE)
ダメ!
(FALSE)
ctype_digitOK!
(TRUE)
基本ダメ!
(FALSE)
ダメ!
(FALSE)

今回、型によって動作が変わるものもありましたが、PHPは型を意識せずコーディングできるため、逆に型によってハマることも多いものです。

PHPといえども型を意識してコーディングするよう心がけたいものですね。

数値チェックにもいろいろな方法があり、それぞれ特長がありますので、プログラムの内容に合ったチェック方法を採用しましょう。

 

※ctype_digitに関してはTwitter上で誤りのご指摘があり、再修正させていただきました。

これまで当記事をご覧頂いた方には認識の誤った記事を掲載しましたことをお詫び申し上げます。誠に申し訳ございません。

また、ご指摘いただいた方にはこの場を借りて御礼申し上げます。

スポンサードリンク

  • このエントリーをはてなブックマークに追加
  • Pocket

コメントを残す

*