0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Android】日付入力のバリデーションをつくる!

Last updated at Posted at 2017-12-10

#日付入力のバリデーション

ユーザーが生年月日の入力や、予約日の入力をした際に不正な入力値を無効にしたい、エラーダイアログを出したいときがあると思います。
そんな時に使用するバリデーションの実装についてまとめてみました!

・↓「年」のバリデーション実装についてはこちら↓
【Android】無効な「年」をはじくバリデーションを実装するには??

##実装コード

ValidationUtil.java
    /**
     * 有効な日付であるかのチェック
     * 13月や32日といった日にちは無効とする
     *
     * @param inputBirthDateString
     * @return
     */
    public static Boolean dateValidation(String inputDateString){

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");

        // ポイント1
        dateFormat.setLenient(false); 
        Date parsedDate = null;
        try {

        // ポイント2
            parsedDate = dateFormat.parse(inputDateString);
        } catch (ParseException e) {
            e.printStackTrace();
            return false;
        }

        // ポイント3
        return dateFormat.format(parsedDate).equals(inputDateString);
    }


###ポイント1
Lenient:
寛大な、慈悲深い、情け深い、(…に)寛大で、大目に見る、甘い
→ setLenient(false) は寛大さをなくす = 厳密なチェックをすることを意味します。

デフォルトでは true になっており、この設定だと、実在しない日付は自動的に繰り上げ・繰り下げが行われます。(例: 1月32日 → 2月1日)

###ポイント2
String 型を SimpleDateFormat を用いて Data型に変換します。
正常な日付の場合はパースが成功。無効な日付の場合はfalseを返します。

###ポイント3
ポイント2までの処理で問題なさそうですが、このままでは1つ問題があります。
それは SimpleDateFormatが前方一致で処理を行うからです。
→ 例: SimpleDateFormatのインスタンスを ”yyyy/MM/dd” の日付形式で作成したき、"2017/12/1A”という値がformatでき、”2017年12月1日”として扱われてしまいます。

→ なので、最後に「バリデーション対象となる文字列」と「SimpleDateFormatで変換したあとの文字列」を比較し、 例えば 2017/12/1Aが入力されていた場合はfalseを返すようにしています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?