QA@IT
«回答へ戻る

回答を投稿

興味があったのでソースを見てみました。
環境は

  • Windows 8
  • JavaSE 1.7
  • commons-validator-1.4.0 です。

目的のソースは以下の様になっています。
SimpleDateFormatがパースできて("2013/03/1z" → "2013/03/1"にパースされます)、
厳密チェックがtrueの場合はフォーマットの文字列と長さが同じであればOK。
というつくりの様です。

2013/03/11a がfalseになるのは文字数が違うからということですね。

いろいろなフォーマットを受け入れられるとはいえ、
formatter.setLenient(false);
なのに通るんですねぇ。

public boolean isValid(String value, String datePattern, boolean strict) {

        if (value == null
                || datePattern == null
                || datePattern.length() <= 0) {

            return false;
        }

        SimpleDateFormat formatter = new SimpleDateFormat(datePattern);
        formatter.setLenient(false);

        try {
            formatter.parse(value);
        } catch(ParseException e) {
            return false;
        }

        if (strict && (datePattern.length() != value.length())) {
            return false;
        }

        return true;
    }
興味があったのでソースを見てみました。
環境は
* Windows 8
* JavaSE 1.7
* commons-validator-1.4.0
です。

目的のソースは以下の様になっています。
SimpleDateFormatがパースできて("2013/03/1z" → "2013/03/1"にパースされます)、
厳密チェックがtrueの場合はフォーマットの文字列と長さが同じであればOK。
というつくりの様です。

`2013/03/11a` がfalseになるのは文字数が違うからということですね。


いろいろなフォーマットを受け入れられるとはいえ、
formatter.setLenient(false);
なのに通るんですねぇ。

```
public boolean isValid(String value, String datePattern, boolean strict) {

        if (value == null
                || datePattern == null
                || datePattern.length() <= 0) {

            return false;
        }

        SimpleDateFormat formatter = new SimpleDateFormat(datePattern);
        formatter.setLenient(false);

        try {
            formatter.parse(value);
        } catch(ParseException e) {
            return false;
        }

        if (strict && (datePattern.length() != value.length())) {
            return false;
        }

        return true;
    }
```