yyyyMMdd中1900-9999的Java正则表达式日期验证

sun*_*leo 0 java regex

如何从转换正则表达式

^((19|20)\\d\\d)(0?[1-9]|1[012])(0?[1-9]|[12][0-9]|3[01])? for 1900-2099
Run Code Online (Sandbox Code Playgroud)

上面的一个完美地工作,只需要更改日期格式1900-9999。所以选择下面的一个。

我这样尝试过

^(([19-99])\\d\\d)(0?[1-9]|1[012])(0?[1-9]|[12][0-9]|3[01])? for 1900-9999
Run Code Online (Sandbox Code Playgroud)

有什么问题,请引导我解决。

Psh*_*emo 5

甚至不要使用正则表达式来验证整数范围(就像现在一样,这是以后的麻烦了)。而是将字符串解析为更准确的日期(例如Date或integer)并使用< <= > >=运算符。

int year = Integer.parseInt(yourYear)
if (year >= 1900 && year <= 9999){
    //do your job here
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您别无选择,必须使用正则表达式进行尝试,则可以尝试将
19\\d\\d|[2-9]\\d\\d\\d其可视化为

19xx  <->    1    9 \\d \\d
2xxx  <-> [2-9] \\d \\d \\d
3xxx  <-> [2-9] \\d \\d \\d
4xxx  <-> [2-9] \\d \\d \\d
5xxx  <-> [2-9] \\d \\d \\d
6xxx  <-> [2-9] \\d \\d \\d
7xxx  <-> [2-9] \\d \\d \\d
8xxx  <-> [2-9] \\d \\d \\d
9xxx  <-> [2-9] \\d \\d \\d
Run Code Online (Sandbox Code Playgroud)

较短的正则表达式可能是19\\d{2}|[2-9]\\d{3}