PHPで数値チェックを行う方法

スポンサーリンク

前説

金額に関わる(例えば、銀行や不動産)システムにおいて、数値チェックは必ず発生すると思います。前回はPHPで日付チェックを行う方法を紹介しました。続いて、PHPで数値チェックを行う方法を紹介したいと思います。
PHPの数値は整数と浮動小数点数(以下、小数)2種類がありますので、そのため、整数のPHPで数値チェックを行う方法と小数のPHPで数値チェックを行う方法を分けて解説したいと思います。

実際のプロジェクトにおいて、数値チェックは主に下記の三つです。(記憶中にこれくらいしかない、足りなかったらコメントで補足して頂きますと助かります。)

整数のみのチェック X 記号あり/なし X カンマあり/なし
整数、小数混在のチェック X 記号あり/なし X カンマあり/なし
(小数のみのチェックの場合もあると思いますが、混在チェックをベースにし少し直せば対応できるので、ここで解説しません)

また、日付チェックと同じように、PHPで数値チェックを行う方法は主に、整合性チェックと桁数チェック、2つのステップに分けて行います。
※今回紹介したPHPで数値チェックを行う方法はWEB画面から入力した文字列が数値かどうかのチェック方法となり、PHP本家の「is_int」や「is_numeric」関数の使う場面が異なるため、予めご了承ください。

整数のPHPで数値チェックを行う方法

まずは、整数の記号なしチェック方法から解説します。

整数、記号なしの場合

記号なしの場合のチェックは下記のサンプルの通りとても簡単で一行だけ済みます。

整数、記号ありの場合

記号ありの場合、記号なしをベースし、記号を正規表現式に入れるだけで済みます。

ここで注意してほしいのは、ゼロは正の数、負の数にも含まれないため、記号なしということです。

カンマ付きの場合

カンマ付きの場合はちょっと複雑です。カンマ付いていない整数も許すことにすれば、尚且つ複雑です。
ここで一旦考え方を整理させていただきます。
まず、チェック要件としては、
1.カンマ付きの数値の文字列は数値として判断する
2.カンマ付いていない数値の文字列も数値として判断する
3.カンマ付いているが、右から3桁ごとに付いていない数値の文字列は数値ではいとして判断する(いわゆる、フォーマットチェック)
4.全角文字と半角スペースを含む数値の文字列は数値ではいとして判断する
のことです。

上記の要件を踏まえて、PHPで数値チェックを行う順番は
1.カンマを抜いて、正規表現で整数かどうかを判断する(要件No.4を満たす、カンマ抜き前提で数値であることを保証する)
2.カンマを含めない文字列は数値として判断する(要件No.2を満たす)
3.カンマ付きですが、カンマの位置が正しいかどうかを判断する(要件No.3を満たす)
4.上記には問題がなければ、数値として判断する(要件No.1を満たす)
のことです。

サンプルです。

テストパターンも複雑のため、テスト用のサンプルも一緒に提供します。いろいろお試しください。

小数のPHPで数値チェックを行う方法

小数点のことを考慮しなければならないため、小数のPHPで数値チェックを行う方法は整数より少し複雑ですが、考え方は同じです。

小数記号なしの場合

実際のプロジェクトにおいて、小数チェックに伴い、小数点以下何桁まで許すか、いわゆる、フォーマットチェックを含めて一緒にチェックする要件が多い(ほぼ100%)かと思います。
ですので、フォーマットチェックを含めて下記のようなサンプルを提供します。例えば、整数部が最大8桁、小数部が最大2件の場合、第2引数に「8.2」を設定すれば、良いです。

フォーマット「8.2」のテストサンプルです。お試しください。

小数記号ありの場合

上記の記号なし正規表現式に記号を追加すれば、完成です。解説が必要なことろは特にないと思います。

カンマ付きの場合

厄介なカンマ付きチェックですね。基本的に、考え方は整数チェックと同じですが、小数部のカンマのいたずらチェックも考慮しなければならないため、少し手間がかかります。
サンプルです。注意してほしいところを注釈で解説します。

テスト用のサンプルも一緒に提供します。いろいろお試しください。

まとめ

PHPで数値チェックを行う方法を紹介しました。長かったですね。お疲れ様でした。サンプルが実際のプロジェクトにお役に少しでも立てたのであれば嬉しいです。
こちらも疲れました。それでは、また!!

スポンサーリンク