[英]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.