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

时间:2015-10-19 07:45:36

标签: 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);
    }
}


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

4 个答案:

答案 0 :(得分:8)

问题在于这一行:

sdf.setLenient(false);

和这个日期:

String s1="29/02/2006";

由于2006 没有闰年使您的日期无效且宽松设置为false日期解析调用失败并抛出{{1 }}

如果您注释掉ParseException行:

,问题将得到解决

或使用有效日期:

sdf.setLenient(false);

由于String s1="29/02/2008"; 是闰年,因此2月29日为有效日期。

答案 1 :(得分:0)

您不需要正则表达式。如果您获得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;
    }
}

答案 2 :(得分:0)

由于以下行而抛出异常。评论它。

sdf.setLenient(假);

答案 3 :(得分:0)

由于2006年不是闰年,使用String s1="29/02/2006";将抛出一个解析异常。

尝试其他日期,它会正常工作。