如何从转换正则表达式
^((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)
有什么问题,请引导我解决。
甚至不要使用正则表达式来验证整数范围(就像现在一样,这是以后的麻烦了)。而是将字符串解析为更准确的日期(例如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}。