クレジット カードの有効期限を MM/YY 形式で検証したいと考えています。シンプルな日付形式/正規表現を使用するかどうか、検証方法についての手がかりがありません。
あなたの助けに感謝。
クレジット カードの有効期限を MM/YY 形式で検証したいと考えています。シンプルな日付形式/正規表現を使用するかどうか、検証方法についての手がかりがありません。
あなたの助けに感謝。
SimpleDateFormat
を解析するために使用し、それを「今」でDate
ある新しいと比較します。Date
String input = "11/12"; // for example
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/yy");
simpleDateFormat.setLenient(false);
Date expiry = simpleDateFormat.parse(input);
boolean expired = expiry.before(new Date());
@ryanp
寛大さの側面に感謝します。上記のコードはParseException
、入力が適切でない場合にをスローします。
悪魔の代弁者を演じる...
boolean validateCardExpiryDate(String expiryDate) {
return expiryDate.matches("(?:0[1-9]|1[0-2])/[0-9]{2}");
}
これは次のように変換されます。
...そのため、このバージョンではゼロで埋められた月 (01 - 12) が必要です。これを防ぐ?
には、最初の後に a を追加します。0
有効な有効期限文字列を取得しているかどうかを検証するには:
DateTimeFormatter ccMonthFormatter = DateTimeFormatter.ofPattern("MM/uu");
String creditCardExpiryDateString = "11/21";
try {
YearMonth lastValidMonth = YearMonth.parse(creditCardExpiryDateString, ccMonthFormatter);
} catch (DateTimeParseException dtpe) {
System.out.println("Not a valid expiry date: " + creditCardExpiryDateString);
}
クレジット カードの有効期限が切れているかどうかを検証するには:
if (YearMonth.now(ZoneId.systemDefault()).isAfter(lastValidMonth)) {
System.out.println("Credit card has expired");
}
すべてのタイム ゾーンで新しい月が同時に始まるわけではないため、どのタイム ゾーンを使用するかを検討してください。UTC が必要な場合:
if (YearMonth.now(ZoneOffset.UTC).isAfter(lastValidMonth)) {
必要に応じて、例のために、ヨーロッパ/キエフのタイムゾーン:
if (YearMonth.now(ZoneId.of("Europe/Kiev")).isAfter(lastValidMonth)) {
リンク: Oracle チュートリアル: Java.time の使用方法を説明する Date Time。
本当に正規表現を使用する必要がありますか?正規表現は、日付ではなく、文字の一致にのみ適しています。単純な日付関数を使用する方がはるかに簡単だと思います。