为了账号安全,请及时绑定邮箱和手机立即绑定

防止SimpleDateFormat匹配带有多余字符的字符串

防止SimpleDateFormat匹配带有多余字符的字符串

GCT1015 2021-05-15 19:12:07
我正在使用以下代码对文本输入的数据类型是否为日期进行分类:private boolean isDate(String val){    //These are the only formats dates will have    String[] formatList = {"MM/dd/yyyy", "MM-dd-yyyy", "MMM/dd/yyyy", "dd-MMM-yyyy"};    SimpleDateFormat dateFormat = new SimpleDateFormat();    dateFormat.setLenient(false);    dateFormat.    //Loop through formats in formatList, and if one matches the string return true    for (String str:formatList)    {        try        {            dateFormat.applyPattern(str);            dateFormat.parse(val.trim());        } catch (ParseException pe)        {            continue;        }        return true;    }    return false;}在switch语句中,连同isNumber,isDatetime,isVarchar2等其他函数一起调用此方法。当我传递值“ 4/05/2013 23:54”(即日期时间)时,SimpleDateFormat对象成功解析了该方法。我认为这是因为它执行了正则表达式匹配。这意味着我必须在isDatetime之后调用isDate,否则将不会被归类为日期时间。是否有一种简单的方法来使SimpleDateFormat严格匹配(即,在有多余字符时阻塞)?
查看完整描述

2 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

我想仅以一种模式使用Java8 +中的java.time API:


private boolean isDate(String dateString) {

    DateTimeFormatter format =

            DateTimeFormatter.ofPattern(

                    "[M/d/uuuu][M-d-uuuu][MMM/d/uuuu][d-MMM-uuuu]"

            );

    try {

        LocalDate.parse(dateString, format);

        return true;

    }catch (DateTimeParseException e){

        return false;

    }

}

在哪里[M/d/uuuu][M-d-uuuu][MMM/d/uuuu][d-MMM-uuuu]匹配M/d/uuuu或M-d-uuuu或MMM/d/uuuu或d-MMM-uuuu


查看完整回答
反对 回复 2021-05-26
  • 2 回答
  • 0 关注
  • 193 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信