文字数チェック

最終更新日: 2023年5月25日
R8 | R9

実装イメージ

リアルタイム方式でのチェックとなります。
指定したサイズを超えて入力したタイミングで、エラーを表示します。(図1,図2)

入力サイズを超えない
入力サイズを超えた時にエラーを表示

定義方法 - 数値型項目の場合

モデル項目の詳細定義ダイアログを開き、入力チェックタブの「範囲チェック」欄で指定を行います。
例えば4桁以内としたい場合は、「0-9999」と設定してください。

数値型の文字数チェック
詳細は「範囲チェック>文字数チェックとして使う」をご覧ください。

定義方法 - 数値型以外の場合

モデル項目の詳細定義ダイアログで「入力チェック」タブをクリックして開きます。
「文字数チェック」欄(①)に数値を、②のセレクトボックスで単位を設定します。
「char」は文字数で、「byte」は文字を構成するバイト数です。

②の選択肢の中で「(警告)」と書かれたものを選択すると、設定した文字数を超えて登録しようとした時に警告を表示します。
この場合、警告表示後、再度「保存」ボタンをクリックすると登録されます。

文字数チェックの指定

この欄には数字だけでなく、半角ハイフン(-)を用いた書式が利用できます。

書式 記述例 意味
数字のみ 5 5文字以内(6文字ならエラー)
-数字 -5 5文字以内(上記「数字のみ」の記述と同じ)
数字- 5- 5文字以上(4文字ならエラー)
数字1-数字2 5-8 5文字以上8文字以内

文字列項目とデータベースの関係

文字列型の項目に「文字数チェック」を指定しない場合、
型の仕様として決められている最大文字数を超える入力が行われたときにデータベースエラーが発生します。

例えば Oracle の場合、標準では文字列型項目に「varchar2(255 char)」が適用されるため、
最大文字数は 255 文字です。
従って、文字数チェック設定に 255 より小さい数値を指定することで、過入力によるデータベースエラーを回避できるようになります。

仕様・制約

  • 文字列型項目で、char 指定(空白を含む)の場合は、チェック処理はリアルタイムで行われます。(ブラウザのJavaScriptでチェックします。)
  • 数値型項目ならびに、文字列型で byte 指定の場合はリアルタイムではなくサーバ側でチェックされます。
  • 入力エラーの状態では「保存」などのボタンを押下することはできません。
  • エラーとなった入力項目は、背景が赤となります。テキストボックスまたは日付時刻リストボックスが対象です。
  • 数値フォーマットを指定している場合、これも考慮して文字数を設定してください。(例 : 7桁の数値入力項目で、3桁区切りで「,」を入力させる場合、これを考慮して文字数の上限を 9 とする必要があります。)
  • 入力対象ではない項目に対する入力チェックを行うことはできません。具体的には計算式で求められる項目や、読み込み専用項目、参照連動項目です。
  • 一覧更新画面(親子モデルにおける、子モデル同時更新画面も含む)では、警告指定は動作しません。

正規表現との併用

文字列型項目で char 指定(空白を含む)の場合、文字数チェックは内部で正規表現式に展開されます。
例えば文字数に4と設定した場合、正規表現 ".{0,4}" が設定されます。
そのため、もし正規表現の設定を同時に行なった場合、正規表現チェックはサーバチェック方式に切り替わります。

文字列型項目で文字数チェックと正規表現を併用し、両方ともリアルタイムチェックとする場合は、文字数チェックは指定せず、正規表現式で文字数チェックも兼ねるようにするとよいでしょう。

モデル参照項目での利用

Wagbyの文字数チェックは、データベースのテーブルのカラム(列)のサイズを超えないように、事前に入力チェックを行うという機能です。

そのため、モデル参照項目(検索画面など)に文字数チェックを適用した場合は、画面に表示される「内容部」の文字数ではなく、テーブルのカラムに格納される「ID部」の文字数のチェックになります。

バイト指定の動作

入力文字数チェック(byte)のとき、"環境>データベースの文字エンコーディング情報"を利用します。この設定が空白のときは "UTF-8" 扱いとなります。[この仕様を旧方式に戻す...]

ブラウザでのリアルタイムチェック

データベースの文字エンコーディング情報が "UTF-8" の場合のみ、バイト数でチェックするようになります。それ以外は文字数でチェックします。

UTF-8 では原則は1文字3バイトですが、JIS X 0213の第3・4水準漢字の一部と絵文字では1文字4バイトとなるものがあります。