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。你创造了我的一天你创造了我的一天