簡體   English   中英

在Java中的String.matches中使用正則表達式以匹配日期格式

[英]Using Regex in String.matches in java to match a date format

根據格式dd / mm / yyyy驗證給定日期。
有效= 1
無效= -1
范例1:
輸入= 12/06/1987
輸出= 1
范例2:
輸入= 03/1/1987
輸出= -1

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CheckDateFormat {
    public static void main(String[] args) {
        String s1="29/02/2006";
        getvalues(s1);
    }
    public static void getvalues(String s1) {
        if(s1.matches("[0-9]{2}[/][0-9]{2}[/][0-9]{4}"))
        {
            SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
            sdf.setLenient(false);
            try {
                Date d1=sdf.parse(s1);
                System.out.println(1);
            } catch (ParseException e) {
                //e.printStackTrace();//Always going to catch block
                System.out.println(-1);
            }
        }
        else
            System.out.println(-1);
    }
}


該代碼的問題在於它總是返回-1。
它總是進入catch塊並給出ParseException。
正則表達式有問題嗎?

問題是這一行:

sdf.setLenient(false);

這個日期:

String s1="29/02/2006";

由於2006 年不是a年,因此您的日期無效, 寬容設置為假日期,解析調用失敗並拋出ParseException

如果您將sdf.setLenient(false);注釋掉,問題將得到解決sdf.setLenient(false); 線:

或使用有效日期:

String s1="29/02/2008";

由於2008是a年,因此2月29日為有效日期。

您不需要正則表達式。 如果獲得ParseException ,則可以return -1否則return 1

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CheckDateFormat {
    public static void main(String[] args) {
        String s1="29/02/2006";
        System.out.println(getvalues(s1));
    }
    public static int getvalues(String s1) {
        SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
        sdf.setLenient(false);
        try {
            Date d1=sdf.parse(s1);
            System.out.println(1);
        } catch (ParseException e) {
            return -1;
        }
        return 1;
    }
}

由於下一行而引發異常。 評論它。

sdf.setLenient(false);

因為2006年不是leap年,所以使用String s1="29/02/2006"; 將引發解析異常。

嘗試其他日期,它將正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM