dd-mm-yyyy の形式である場合、文字列でテストしようとしています。何か助けてください。
申し訳ありませんが、私はただの初心者です。
dd-mm-yyyy
のような入力を許可する をチェックするだけでなく99-99-9999
、 を使用SimpleDateFormat
して実際に解析し、有効な日付かどうかをチェックできます。
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
formatter.parse("99-99-9999");
formatter.parse("18-07-2013");
日付が無効な場合はParseExceptionがスローされ、エラーをキャッチして適切に処理できます。
編集:
ボヘミアンが指摘したように、これは実際には99-99-9999
入力で例外をスローしません。代わりに、「ロールオーバー」して、悪い日付を正当な日付として解釈します。日付の計算を簡単にするために、意図的にこれを行った可能性があると思います。例えばは解析後10-13-2000
となり10-1-2001
ます(13月がないので、代わりに翌年の1月になります)。代わりに例外をスローしたい場合は、寛大ではないように指示する必要があります。
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
formatter.setLenient(false); // <== Added this line
formatter.parse("99-99-9999");
formatter.parse("18-07-2013");
String test = "13-04-1999";
try {
SimpleDateFormat sdf = new SimpleDateFormat("dd-mm-yyyy");
sdf.setLenient(false);
sdf.parse(test);
} catch(ParseException ex) {
//string is not valid Date in your format
}
if(myString.matches("\\d{2}-\\d{2}-\\d{4}")){
//Do something
}
二重バックスラッシュは、コンパイラが 2 番目を文字どおりに解釈するために使用され、文字列の一部としての文字列は\d
、数字のエスケープ シーケンスを作成するために使用されます。