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

yyyyMMdd中1900-9999的java正则表达式日期验证,java,regex,Java,Regex,如何将正则表达式从 ^((19|20)\\d\\d)(0?[1-9]|1[012])(0?[1-9]|[12][0-9]|3[01])? for 1900-2099 上面的一个很好用,只需要更改日期格式1900-9999。所以选择下面的一个 我试过了,但没用 ^(([19-99])\\d\\d)(0?[1-9]|1[012])(0?[1-9]|[12][0-9]|3[01])? for 1900-9999 有什么问题,请指导我解决。[19-99]是对操作员的错误使用。此部分将把1、9集合中的

如何将正则表达式从

^((19|20)\\d\\d)(0?[1-9]|1[012])(0?[1-9]|[12][0-9]|3[01])? for 1900-2099
上面的一个很好用,只需要更改日期格式1900-9999。所以选择下面的一个

我试过了,但没用

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

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

[19-99]
是对操作员的错误使用。此部分将把
1
9
集合中的一个字符与
9
9
匹配(即,仅
1
9

我不知道为什么top(“working”)表达式如此复杂。你可以用

\b(19|20)\d\d\b
1900-2099年,以及

\b19\d\d\b
1900-1999年。在Java字符串中使用双转义MyBackslash

(…在另一个问题更改后)

对于1900-9999,只需使用

\b(19|[2-9]9)\d{2}\b

[19-99]
是对操作员的错误使用。此部分将把
1
9
集合中的一个字符与
9
9
匹配(即,仅
1
9

我不知道为什么top(“working”)表达式如此复杂。你可以用

\b(19|20)\d\d\b
1900-2099年,以及

\b19\d\d\b
1900-1999年。在Java字符串中使用双转义MyBackslash

(…在另一个问题更改后)

对于1900-9999,只需使用

\b(19|[2-9]9)\d{2}\b

表达式可以如下所示:

^(19|[2-9]\\d)\\d{2}$
解释如下:

^
:字符串的开头
(19|[2-9]\\d)
:值
19
或值
20
99

\\d{2}
:值
00
99


$
:字符串结尾

表达式可能如下所示:

^(19|[2-9]\\d)\\d{2}$
解释如下:

^
:字符串的开头
(19|[2-9]\\d)
:值
19
或值
20
99

\\d{2}
:值
00
99


$
:字符串结尾

甚至不要使用正则表达式来验证整数范围(这是以后的维护地狱,就像现在一样)。而是将字符串解析为更精确的值,如日期或整数,并使用
=
运算符

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

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

甚至不要使用正则表达式来验证整数的范围(这是以后的维护地狱,就像现在一样)。而是将字符串解析为更精确的值,如日期或整数,并使用
=
运算符

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

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

请提供示例输入和预期输出,以使事情更加清楚。
^(19\d{2}[2-9]\d{3})$
@AnkurShanbhag input date(yyyyymmdd)是19000130-99991231正如pshemos所说,这可能不是正则表达式的最佳应用程序。仅检查值范围将更容易维护。将其转换为日期,然后将其与范围进行比较,不是更易于维护吗?请提供示例输入和预期输出,以使事情更加清楚。
^(19\d{2}|[2-9]\d{3}$
@AnkurShanbhag输入日期(yyyyMMdd)为19000130-9991231正如pshemos所说,这可能不是正则表达式的最佳应用程序。仅检查值范围将更容易维护。将其转换为日期,然后将其与范围进行比较,不是更易于维护吗?感谢回复,不是1900-1999,而是1900-9999。感谢回复,不是1900-1999,而是1900-9999。你创造了我的一天你创造了我的一天