我在尝试匹配日期模式时遇到了麻烦。以下任何日期都是合法的:
- 121212
- 4 9 12
- 5-3-2000
- 62502
- 3/3/11
- 09-08-2001
- 8 6 07
- 12 10 2004
- 4-16-08
- 3/7/2005
使这个日期匹配真正具有挑战性的是年份不必是 4 位数字(假设 2 位数字年份是在 21 世纪,即 02 = 2002),月份/日期可以以 0 开头如果它是一个位数的月份,并且日期可以用空格、破折号或斜杠分隔,也可以不用。
这是我目前拥有的:
/((((0[13578])|([13578])|(1[02]))[\/-]?\s*(([1-9])|(0[1-9])|([12][0-9])|(3[01])))|(((0[469])|([469])|(11))[\/-]?\s*(([1-9])|(0[1-9])|([12][0-9])|(30)))|((2|02)[\/](([1-9])|(0[1-9])|([12][0-9])))[\/-]?\s*(20[0-9]{2})|([0-9]{2}))/g
这几乎可行,除了现在我不确定我是否假设日期和月份的长度。例如,在这种情况下121212
,我可能会假设月份是1
而不是12
。另外,由于某种原因,当我打印出$1
and$2
时,它是相同的值。在121212
, $1
is 1212
, $2
is1212
和$3
is的情况下12
。然而,我只想$1
成为121212
。