【发布时间】:2015-10-19 07:45:36
【问题描述】:
根据 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。
正则表达式有什么问题吗?
【问题讨论】:
-
你应该自己做作业。搜索在线正则表达式测试人员并在那里尝试
-
您还混淆了“退货”和“打印”。你还应该告诉你的老师,Java 有一个布尔类型,在这里应该使用它而不是 1/-1。因为2006年2月只有28天,所以进入catch块,所以29/02/2006这个日期是无效的。
-
您是要验证日期还是只验证格式?如果您严格验证日期,那么您得到的异常是正确的,因为 29/02/2006 是无效的。
标签: java regex string date-format simpledateformat