Regex用于匹配有效日期输入的每个阶段的日期

zzwlnbp8  于 2023-05-08  发布在  其他
关注(0)|答案(1)|浏览(119)

我正试图把一个正则表达式放在一起,它匹配有效日期的任何部分,只要该部分从前面开始。有效日期定义为DD/MM/YYYY,其中1900 <= YYYY < 2100。我对闰年、每个月的天数等都不感兴趣。
其目的是在用户输入时向他们提供验证反馈,但仅当他们在错误的轨道上时。我相信这会改善用户体验。
例如:

'1' matches (as e.g. 12/12/1999 is a valid date)
'4' does not match
'04' matches
'12/12/' matches

这就是我得到的:

^(([0123]\d?)|([0123]\d\/[01]?)|([0123]\d\/[01]\d\/?)|([0123]\d\/[01]\d\/(1|2|19\d{0,2}|20\d{0,2})))$

有没有更简单的方法来使用正则表达式?

6ioyuze2

6ioyuze21#

是的,有。基本的方法是,如果输入有A、B和C部分,那么写:

/^A(B(C)?)?$/

等等,对于任何数目的段。这使得从B开始的整个部分都是可选的,因此A本身将匹配。它使得C是可选的,所以AB将匹配。当然,ABC也会匹配。
这里的问题是处理世纪,这需要一点特殊的处理。总的来说,解决方案看起来像

/^[0-3](\d(\/([01](\d(\/((1(9(\d(\d)?)?)|((2(0(\d(\d)?)?)?))?)?)?)?)?)?)?)?$/

相关问题