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型かを判定する場合に使用しましょう。

ctype_digit関数

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

文字列を判定する関数のため、255文字以下の整数int型はダメ!(false)判定になってしまいます。

ctype_digitで数字かチェック

ctype_digitの判定

文字列string => OK!
整数int(256以上) => OK!
整数int(255以下) => ダメ!
小数float => ダメ!

文字列型や整数型に関わらず、整数であればOK!(true)、小数点はダメ!(false)となります。

でも、int型だと255文字以下はダメ!(false)で、256文字以上は文字列とみなし、OK!(true)となります。

HTMLフォームからPOSTされた数値であれば文字列型となるため、バリデーションには使えそうですが、int型の判定に注意しましょう。

preg_match関数

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

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

preg_matchの判定

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

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

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

数値チェックのまとめ

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

数値チェック一覧表

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

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

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

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

スポンサードリンク

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

コメントを残す

*