こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Javaで正規表現を利用して日付を判定したいです

今、次のようなプログラムがあります

~~~~~
package testprogramm;
import java.io.*;
public class Sample01 {
public static void main(String[] args) {
Sample01 nyuryoku = new Sample01();
nyuryoku.keyboardIn();
}
String keyboardIn(){
String str="";
try{
BufferedReader br = new BufferedReader
(new InputStreamReader(System.in));
System.out.println("生年月日を入力してください(西暦年/月/日):");
str = br.readLine();
System.out.println(str + " が入力されました。");
}catch(IOException e){
System.out.println("例外" + e + "が発生しました");
}
finally{
return str;
}
}
}
~~~~~

このプログラムの結果は「〇〇が入力されました」と、標準出力するだけの簡単なプログラムです。
現状、生年月日以外の、何でも入力できる状態になっております。
その状態に制約をかけたいのです。

例えば"1980/11/15"のように「yyyy/mm/dd」の形式であれば、

-------------
正常に登録が完了しました。
-------------

と、表示され。

"23333"のように、「yyyy/mm/dd」の日付の形式で記載されていなかった場合、

―――――――――――――――――――
正しい日付を入力してください:
―――――――――――――――――――

と、再入力を促すような。
そういったユーザーが入力した値を判定するようなプログラムを書きたいのですが、どうしてもうまく書くことができません。

【Javaで正規表現】文字列をチェックするパターンの書き方とサンプル | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト https://www.sejuku.net/blog/13215

に、日付をtrueとfalseで判定するプログラムは見つかったのですが。
これをどう活かせれば、メッセージを出し分けしたり再入力を促せるのかという繋ぎ込みができず…お力添えいただけますと幸いです。

よろしくお願い致します<m(__)m>

※OKWAVEより補足:「Webシステム開発」についての質問です。

投稿日時 - 2019-07-29 19:12:45

QNo.9640450

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

正規表現だと、2001/02/29 のようなものをエラーにするのが面倒です。
DateUtils.parseDate で、文字列を Dateオブジェクトに変換して、例外が出なければOKでそのままDateデータとして使えます。例外が出たら入力しなおし。

投稿日時 - 2019-07-29 23:03:52

お礼

ありがとうございます、ネットでそれを使っているプログラムを調べてみます(^^;

投稿日時 - 2019-08-02 07:34:32

ANo.2

正規表現の部分だけ、多分な感じだと思う

(20[01][0-9]|19[0-9][0-9])/(1[012]|0?[1-9])/([012]?[1-9]|[123]0|31)

投稿日時 - 2019-07-29 21:32:18

お礼

ありがとうございます!

投稿日時 - 2019-08-02 07:35:54

ANo.1

System.out.println(str.matches("[0-9]{4}/[0-9]{2}/[0-9]{2}"));

これで4桁/2桁/2桁がチェックできます。
あと13月なんてのはないからそういうチェックをするなら
そういう部分が必要です。

投稿日時 - 2019-07-29 19:32:37

お礼

ありがとうございます<m(__)m>
ただ、maiko04さんに書いていただいたコードを、どうやって既存のプログラムに組み込めばうまく動くのかがわからず、困っておりまして。
例えば、

―――――――――――――――
package testprogramm;

import java.io.*;

public class Sample01 {
public static void main(String[] args) {
Sample01 nyuryoku = new Sample01();
nyuryoku.keyboardIn();
}

String keyboardIn() {
String str = "";
System.out.println(str.matches("[0-9]{4}/[0-9]{2}/[0-9]{2}"));
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("生年月日を入力してください(西暦年/月/日):");
str = br.readLine();
System.out.println(str + " が入力されました。");
} catch (IOException e) {
System.out.println("例外" + e + "が発生しました");
} finally {
return str;
}
}
}
―――――――――――――――

と入れてみましても。
結果は、

-------------
false
生年月日を入力してください(西暦年/月/日):
-------------

と、falseという文字が出てきてしまいます。
自分の質問時のコードに、どこに「System.out.println(str.matches("[0-9]{4}/[0-9]{2}/[0-9]{2}"));」を入れたら、

――――――――――――――――
生年月日を入力してください(西暦年/月/日):
――――――――――――――――

と出てきた後にユーザーが文字列を入力をし、その値をチェックすることができますでしょうか。度々すみません。お手隙の時にご回答いただけますと助かります。よろしくお願い致します。

投稿日時 - 2019-08-02 07:45:23

あなたにオススメの質問