intra-mart標準バリデーションの注意点

はじめに

今回は、intra-mart標準バリデーションの注意点についてご紹介します。
バリデーションルールはいくつかありますが、本記事では、その中でもintegerを対象に、「01」や「-0」といった入力値に対する挙動を扱います。
バリデーションルールの詳細については以下のドキュメントをご参照ください。 document.intra-mart.jp

integerについて

上記の『バリデーションルール リファレンス』によると、integerは次のように定義されています。

値が整数型の数字であるかを検証します。整数型の数字ではない場合はエラーとします。

下の例のとおり、文字列(例:integer)を入れると「整数を入力してください」とエラーになります。
これは整数型の数字でないものをエラーにする挙動です。
ただしintegerは、「値が整数として解釈できるかどうか」しか見ていません。
そのため、整数として解釈できる値であれば、表記として次のような入力も通ってしまいます。

  • 01
  • -0

つまりintegerは「値が整数かどうか」だけ見ており、表記(先頭ゼロや -0 など)は別途ルールで制御する必要があります。

対処法

以下のような正規表現を使用することで、「0」または先頭ゼロのない整数だけを許可し、「01」 や 「-0」 の入力を防ぐことができます。

^(0|[1-9][0-9]*|-[1-9][0-9]*)$

また、正規表現で制御する代わりに、クライアント側の JavaScript やサーバ側の処理で数値として正規化するといった対処も可能です。
どちらで処理するかを決めて、挙動を統一しておくことをおすすめします。

おわりに

今回はintra-mart標準バリデーションのintegerに関する注意点を紹介しました。
integerだけでは、意図しない表記の値がデータベースに登録されてしまう可能性があります。
許容する値と表記のルールを明確にし、正規表現による厳密なバリデーションやプログラムでの正規化など、適切な対処を行いましょう。