【Java】正規表現で日付文字列(MM-dd-yyyy形式)を検証する方法
Javaでは、正規表現(Regex)を使うことで、文字列として与えられた日付が「MM-dd-yyyy」形式に合致しているかどうかを簡単に検証できます。この記事では、実際に使える正規表現パターンと、その具体的な実装方法を2つのサンプルコードで解説します。
MM-dd-yyyy形式に対応する正規表現
以下の正規表現は、「月/日/年」(例: 09/26/1989)という形式の日付にマッチします。
^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$各部分の意味は次の通りです。
- 月の部分:
1[0-2]または0[1-9]→ 01〜12 のみ許可 - 日の部分:
3[01]、[12][0-9]、0[1-9]→ 01〜31 のみ許可 - 年の部分:
[0-9]{4}→ 任意の4桁の数字
PatternクラスとMatcherクラスを使った検証方法
文字列の中から指定形式の日付を検証するには、以下の手順を実行します。
Patternクラスのcompile()メソッドで、上記の正規表現をコンパイルします。matcher()メソッドの引数に検証対象の文字列を渡し、Matcherオブジェクトを取得します。Matcherクラスのmatches()メソッドは、マッチすればtrue、しなければfalseを返すので、これを呼び出してデータを検証します。
サンプルコード1
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MatchingDate {
public static void main(String[] args) {
String date = "01/12/2019";
String regex = "^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$";
// パターンオブジェクトを作成
Pattern pattern = Pattern.compile(regex);
// 文字列に対してコンパイル済みパターンを適用
Matcher matcher = pattern.matcher(date);
boolean bool = matcher.matches();
if (bool) {
System.out.println("日付は有効です");
} else {
System.out.println("日付は無効です");
}
}
}実行結果
日付は有効です
String.matches()メソッドを使った簡易的な検証方法
String クラスの matches() メソッドは、引数として受け取った正規表現と現在の文字列を照合し、マッチすれば true、そうでなければ false を返します。このメソッドを使えば、よりシンプルに形式チェックが可能です。
手順は以下の2ステップだけです。
- 検証したい日付文字列を取得します。
- その文字列に対して
matches()メソッドを呼び出し、引数に上記の正規表現を渡します。
サンプルコード2
import java.util.Scanner;
public class Just {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("名前を入力してください:");
String name = sc.nextLine();
System.out.println("生年月日を入力してください:");
String dob = sc.nextLine();
// MM-DD-YYYY形式の日付を受け入れる正規表現
String regex = "^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$";
boolean result = dob.matches(regex);
if (result) {
System.out.println("入力された生年月日は有効です");
} else {
System.out.println("入力された生年月日は無効です");
}
}
}実行結果1(無効な形式の場合)
名前を入力してください: Janaki 生年月日を入力してください: 26/09/1989 入力された生年月日は無効です
日が先に来る「26/09/1989」という入力は、月の位置にある値が13以上になるため、パターンにマッチせず無効と判定されます。
実行結果2(有効な形式の場合)
名前を入力してください: Janaki 生年月日を入力してください: 09/26/1989 入力された生年月日は有効です
注意点:カレンダー上の妥当性までは検証できない
この正規表現はあくまで「形式」のチェックのみを行います。そのため、「02/31/2020」のような実在しない日付でも、形式としては正しいため通過してしまいます。存在しない日付まで厳密に排除したい場合は、Java 8以降で利用できる java.time.format.DateTimeFormatter クラスと LocalDate.parse() を組み合わせる方法を併用することをおすすめします。
-
【Java入門】文字列をDate型に変換する方法をわかりやすく解説
はじめにJavaでは、SimpleDateFormatクラスを使うことで、文字列形式の日付データをDateオブジェクトへ簡単に変換できます。本記事では、具体的なサンプルコードとともに、その基本の手順をわかりやすく解説します。変換元の文字列を用意するまず、以下のように日付を表す文字列を用意します。String date1 = 11/10/2018; String date2 = 15-Mar-2019 21:11:35;文字列から日付への変換手順SimpleDateFormatのコンストラクタには、元の文字列の書式に対応したパターンを指定します。その後、parse()メソッドを呼び出すことで、文
-
JavaのGsonライブラリで日付をフォーマットする方法|setDateFormat()の使い方
Gsonは、Googleが開発したJava向けのJSONライブラリです。Gsonを利用すると、JavaオブジェクトからJSON文字列を生成したり、その逆にJSONをJavaオブジェクトへ変換したりすることができます。 Gsonインスタンスを作成するには、まずGsonBuilderのインスタンスを生成し、create()メソッドを呼び出します。そして、Dateオブジェクトを任意の日付形式でシリアライズしたい場合は、setDateFormat()メソッドを使用します。このメソッドに日付パターンを渡すことで、Gsonは指定されたパターンに従ってDateオブジェクトをJSON文字列へ変換します。 構文