Skip to content

入力値を正規化する

全角→半角、トリムなど、保存前に値を整える。

入力された値を整えてから扱いたいときは normalize に変換の名前を並べる。

yaml
fields:
  - { field: code, label: コード, type: text, normalize: [toHankaku, trim] }
  - { field: zip,  label: 郵便番号, type: text, normalize: [toHankaku],
      validators: [ { type: postalCode } ] }

検証より先に走る

順番が重要。normalizevalidators の順なので、全角で入力されても半角に直してから形式チェックにかかる。上の例なら「123-4567」と打たれても郵便番号として通る。

逆にすると「全角だから形式違反」で弾かれ、利用者は何が悪いのか分からない。この順序のおかげで「全角で入れないでください」という注意書きが要らなくなる。

並べた順に適用される

配列なので順番がある。[toHankaku, trim] は「半角に直してから前後の空白を取る」。逆順でも結果はだいたい同じだが、変換によっては効き方が変わるので、広い変換から狭い変換の順に書くと考えやすい。

何が使えるか

変換何をするかよく使う場面
toHankaku全角英数字→半角コード、電話番号、郵便番号、数量
toZenkaku半角→全角氏名カナを全角で揃える
hiraToKata / kataToHiraひらがな⇔カタカナカナ検索用の項目
trim前後の空白を取るほぼ全部のテキスト項目
collapseSpaces連続する空白を1つに住所、会社名
parseNumber数字として読める形にするカンマ付きで入力される金額

業務システムで一番効くのは toHankakutrim の組み合わせ。コピー&ペーストで入る余計な空白と、全角で打たれた数字は、放っておくとデータが揃わない原因の大半になる。

変換した値が保存される

画面の表示だけを変えるのではなく、変換後の値が実際にデータとして渡る。見せ方だけ変えたいなら normalize ではなく format を使う。

やりたいこと使うもの
入ってくる値を揃えたい(保存する値が変わる)normalize
保存する値は変えず、見せ方だけ整えたいformat

同じ変換がバックエンドでも動く

正規化の実装は Dart / TypeScript / Java の3言語に同名で用意されていて、出力が一致することがテストで担保されている。画面を通らずに API を叩かれても、サーバ側で同じ正規化ができる

足りない変換は足す

normalize の名前も開いた文字列なので、社内のコード整形ルールなどは名前を決めて登録すれば書けるようになる。

書けるキー

キー書く場所必須既定値有効なページ種別説明
normalizefieldarray of stringtoHankaku / toZenkaku / hiraToKata / kataToHira / trim / collapseSpaces / parseNumber ほか)任意crud dashboard detail form master report search wizardInput converters applied before validation. Built-ins: toHankaku, toZenkaku, hiraToKata, kataToHira, trim, collapseSpaces, parseNumber.

この表は spec/reference.json から生成している(JSON Schema が正)。手元では npx hatake reference <キー名> で同じものが引ける。

近い例

例は丸ごと写して直すのが一番速い。以下は CI で検証済み(そのまま動く形)。

ファイル種別画面どういうときに使うか
customer_form.yamlform顧客入力一覧を持たない単票の入力画面が欲しい(新規と編集を1枚で)
customer_wizard.yamlwizard顧客登録項目が多いので入力をステップに分けて、1ステップずつ検証したい

実物を見る

デモアプリの「顧客マスタ」がこれを使っている。 デモを開く