忍者ブログ
気ままな一人暮らしの、ささやかな日常
美術鑑賞からプログラムのコードまで、思いつくままに思いついた事を書いています。
[4898]  [4895]  [4894]  [4893]  [4892]  [4891]  [4890]  [4889]  [4888]  [4887]  [4886
ざっくざく > パソコン > バリデーションチェックの話
イメージ
こんにちは、和美です。
仕事でJavaの勉強中、バリデーションチェックに遭遇したので調べたまとめです。
Javaの用語集も文字数が増えてきたのでそのうち更新します。

【 目次 】

  1. 初めに
  2. 空白禁止
  3. Eメールアドレス
  4. 年齢
  5. その他
  6. 最後に

1. 初めに

Javaのよく分かっていなくて調べた用語集から独立しました。
元はバリデーションチェックの中の「@Email」とは具体的にどんなチェックをしているんだろう? という程度の軽い疑問だったのですが ……。
さすがにEメールアドレスだけだと短かったので、バリデーションチェックの話をまとめています。

バリデーション:入力内容や記述内容が要件を満たしているか、妥当性を確認すること。…… ぼんやりと入力内容のチェックだと思い込んでいました。
英語の意味は( 作業結果などが規定の条件や仕様に適合しているかどうかの )検証、証明、妥当性確認だそう。英検一級以上の単語らしいです。
バリデーション:わわわIT用語辞典

以下、@で示されるのが自動で設定される入力内容チェックです。

2. 空白禁止

主キーでオートナンバーのIDは@NotNull、Name(名前)は@NotEmptyでした。
まずemptyの英語の意味は 「 中身のない、からの 」 です。
何がどう違うの?と思って調べてみました。
@NotNull/@NotEmpty/@NotBlankの違い:n-agetsumaの日記
この三種類は少し挙動が違うようですね。
主キー設定でオートナンバーのIDはnullにはならないのですが、疑問は解決していません。
全部つけておけば?と思ったのは内緒。
読み進めていくと、本の解説部分に 「 フォームが未入力の場合、Nullではなく空文字と判定される 」 と書いてあって解決しました ……。

3. Eメールアドレス

Eメールアドレスには、@Email。シンプルですね。ゆえに内容が欠片も分かりませんでした。
「@Email Spring Boot」で検索したところ、
5.5. 入力チェック:5.5.2.1.1. 基本的な単項目チェック:TERASOLUNA グローバルフレームワーク開発ガイドライン
上記ページの(3)にて
対象のフィールドがRFC2822準拠のE-mail形式であることを示すorg.hibernate.validator.constraints.Emailを付ける。
と載っていました。
なるほど、RFC2822とやらでEメール形式を設定しているのか、という事で
3.4.1. addr-spec 仕様:RFC 2822
基準がこちらにありました。

割と長いので該当箇所のみ引用します。

addr-spec = local-part "@" domain
local-part = dot-atom / quoted-string / obs-local-part
domain = dot-atom / domain-literal / obs-domain
domain-literal = [CFWS] "[" *([FWS] dcontent) [FWS] "]" [CFWS]
dcontent = dtext / quoted-pair
dtext = NO-WS-CTL / ; 空白・制御文字以外
%d33-90 / ; "["・"]"・"\"を除く、残りの
%d94-126 ; US-ASCII 文字



…… 上記で引用したアドレスの基準の問題点は下記リンク先が詳しいです。
一言でまとめるとmandw@+$%zakki.co.jpという「 見た目でおかしそうな 」メールアドレスが通ってしまいます。
Hibernate Validator の @Email を使ってはいけない?:Qiita

なお上記リンクにも解決策はありますが、読んでも理解できていません。
解決策だけなら正規表現のみのようなので以下の方が理解 …… できるかもできないかもしれません。
メールアドレスのフォーマットチェックのリンク集:Qiita
正規表現は@Pattern(regexp="(ここに正規表現を入力)")で設定できるようです。

似たような形式で@CreditCardNumberというクレジットカード形式かどうかを確認するが、有効なカードかを確認するものではないというアノテーションや、@EANでJANコードかを確認するアノテーションもありました。

4.年齢

年齢の入力項目は@Min(0)@Max(200)とありました。
年齢は毎年変わるので、生年月日を入力させて自動計算させるべきとどこかで聞いた記憶が蘇ります。
データベースの授業で年齢は扱わなかった気がするのでJavaの授業でしょうか。
0以上にしてあるのはマイナス値を入力させないため、ですが、最大値は200って大きすぎない?と思ったので調べました。
最高年齢って120歳程度だったような、肉体的には150歳前後が限界という科学的な話を聞いたような、という記憶があったためです。
Wikipediaによると世界最高齢はジャンヌ・カルマンという女性が1875年〜1997年で122歳164日だそう。
多めに見積もっても150ぐらいでいいと思いました ……。
( 適当に130まで落としてつけました )
参考サイト:長寿:Wikipedia

まとめて@Range( min = 0,max = 130 )でもいいそう。
エラーメッセージを編集する時は@Min( value = 0, message = "0以上" )なので、controllerと同じくvalueのみの時は「value =」の記述を省略している模様。

5. その他

この後の手順で電話番号の入力内容を数字とハイフンのみに限る、という自作チェックを設定していたのですが、やり方がさっぱり理解できていないので自作チェックの実装はできていません。
ネットの集合知でどこかでちゃんとしたデータが転がっていると信じています。

6. 最後に

自動でつけるのに任せるのではなくて、中身も確認してから実装しないといけませんね!と思いました。
@Emailなんて一番面倒そうですしね。

リンクは載せませんが、docomoが.kinoko@docomo.co.jpというドットで始まるメールアドレスの新規登録を禁止したというニュースを思い出しました。
本来設定できないメールアドレスのため、利用者によると迷惑メールが来なくて便利だったそうです。
( パソコンからのメールを全面拒否すに設定すると早いのでは ……?)
PR
【 この記事へコメント 】
名前
コメントタイトル
URL
本文
削除用パスワード
累計アクセス数
アクセスカウンター
レコメンド
プロフィール
書いている人:七海 和美
紹介:
更新少な目なサイトの1コンテンツだったはずが、独立コンテンツに。
PV数より共感が欲しい。
忍者ブログ [PR]