在java中的String.matches中使用Regex来匹配日期格式

Aya*_*yan 1 java regex string date-format simpledateformat

根据格式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);
    }
}
Run Code Online (Sandbox Code Playgroud)


代码的问题在于它总是返回-1.
它总是进入catch块并给出ParseException.
正则表达式有问题吗?

anu*_*ava 8

问题是这一行:

sdf.setLenient(false);
Run Code Online (Sandbox Code Playgroud)

这个日期:

String s1="29/02/2006";
Run Code Online (Sandbox Code Playgroud)

因为2006 不是闰年使你的日期无效而且宽松设置为假日期解析调用失败并抛出ParseException.

如果您注释掉sdf.setLenient(false);行,问题将得到解决:

或使用有效日期:

String s1="29/02/2008";
Run Code Online (Sandbox Code Playgroud)

由于2008是闰年使2月29日成为有效日期.