为什么这个数据YYYY-MM-DD正则表达式在Java中失败?

前端之家收集整理的这篇文章主要介绍了为什么这个数据YYYY-MM-DD正则表达式在Java中失败?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的第一个问题和我激动…我已经潜伏了,因为活着和爱网站,但是我为任何新手错误,格式化等道歉…

我试图验证包含Java日期的字符串字段的格式.我们将在字符串中收到日期,我将验证其格式,然后将其解析为真实的Date对象.传入的格式是YYYY-MM-DD格式.但是,如果我通过了“1999-12-33”测试,那么测试将会失败(与日期数字33相同),这种不完整的模式:

((19|20)\\d{2})-([1-9]|0[1-9]|1[0-2])-([12][0-9]|3[01])

但是,一旦我在下面加粗的字符通过测试(但不应该)

((19|20)\\d{2})-([1-9]|0[1-9]|1[0-2])-(0[1-9]|[1-9]|[12][0-9]|3[01])

*附加注意事项,我知道我可以将0 [1-9] | [1-9]改为0?[1-9],但是我想将所有内容都切换成最简单的格式,试图找出为什么这不是’工作

以下是我通过所有不同日期方案运行的废品测试:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class scrapTest {
    public scrapTest() {
    }

    public static void main(String[] args) {

        scrapTest a = new scrapTest();
        boolean flag = a.verfiyDateFormat("1999-12-33");
    }   

    private boolean verfiyDateFormat(String dateStr){
        Pattern datePattern = Pattern.compile("((19|20)\\d{2})-([1-9]|0[1-9]|1[0-2])-(0[1-9]|[1-9]|[12][0-9]|3[01])");
        Matcher dateMatcher = datePattern.matcher(dateStr);
        if(!dateMatcher.find()){
            System.out.println("Invalid date format!!! -> " + dateStr);
            return false;
        }
        System.out.println("Valid date format.");
        return true;
    } 
}

我已经编程了〜10年,但对Java来说非常新鲜,所以请随便解释一下你认为合适的一切.

我认为这是因为你使用dateMatcher.find()而不是dateMatcher.matches().前者寻找一个匹配,后者尝试匹配整个字符串.看到 API page.所以基本上33中的前3位将会匹配您刚加入的[1-9],第二个3将不匹配任何东西,但是该方法仍然返回true.

猜你在找的正则表达式相关文章