正则表达式-日期(mm/dd/yyyy)格式(JavaScript)

正则表达式-日期(mm/dd/yyyy)格式(JavaScript),javascript,regex,Javascript,Regex,正则表达式的格式为mm/dd/yyyy 我的电脑目前有一个小问题,我无法确定。我可以使用有效的月份、闰年和年份范围验证mm/dd/yyyy。虽然所写年份为“2016asdf”,但仍接受该值 它应该遵循的规则是: 只允许有效日期 如果是闰年,2月29日可以计算在内 年份值范围为1900-2099 有效值: 2016年12月31日 1900年1月15日 2016年2月29日因为2016年是闰年 无效值: 1900年1月1日,因为格式为“mm”而不是“m” 1900年1月32日,因为没有这样的日期 1

正则表达式的格式为mm/dd/yyyy

我的电脑目前有一个小问题,我无法确定。我可以使用有效的月份、闰年和年份范围验证mm/dd/yyyy。虽然所写年份为“2016asdf”,但仍接受该值

它应该遵循的规则是:

只允许有效日期 如果是闰年,2月29日可以计算在内 年份值范围为1900-2099 有效值:

2016年12月31日

1900年1月15日

2016年2月29日因为2016年是闰年

无效值:

1900年1月1日,因为格式为“mm”而不是“m”

1900年1月32日,因为没有这样的日期

1900年13月22日,因为没有这样的月份

2100年1月3日超出年度限制

2017年2月29日因为2017年不是闰年


每个|上需要有^和$,因此正则表达式应该是:

^0[13578]1[02][/.]31/[0-9]{2}$^01[3-9]{1[1-2]/./[0-9]{2}$$^0[1-9]{1[0-2]/.[0-9]{2}${2}$^02[/.]29/$


每个|上需要有^和$,因此正则表达式应该是:

^0[13578]1[02][/.]31/[0-9]{2}$^01[3-9]{1[1-2]/./[0-9]{2}$$^0[1-9]{1[0-2]/.[0-9]{2}${2}$^02[/.]29/$


你弄错了。这不应该通过正则表达式来实现,事实上,它并不是为了实现这一点。为此,您需要采取以下步骤:

1-通过正则表达式检查模式

2-验证日期

您正在寻找的模式是:

var pattern = /(0\d{1}|1[0-2])\/([0-2]\d{1}|3[0-1])\/(19|20)\d{2}/
请看一下这一点,以了解模式:

最后,如果您想在模式中检查日期是否有效

以下是整个方法:

    function isValidDate(dtValue2) {
    // your desired pattern
    var pattern = /(0\d{1}|1[0-2])\/([0-2]\d{1}|3[0-1])\/(19|20)(\d{2})/
    var m = dtValue2.match(pattern);
    if (!m)
        return false;
    var d = new Date(dtValue2);
    // Now let's ensure that the date is not out of index


    if (d.getMonth()+1 == parseInt(m[1], 10) && d.getDate() ==parseInt(m[2], 10)) {
        return true;
    }
    return false;
}

你弄错了。这不应该通过正则表达式来实现,事实上,它并不是为了实现这一点。为此,您需要采取以下步骤:

1-通过正则表达式检查模式

2-验证日期

您正在寻找的模式是:

var pattern = /(0\d{1}|1[0-2])\/([0-2]\d{1}|3[0-1])\/(19|20)\d{2}/
请看一下这一点,以了解模式:

最后,如果您想在模式中检查日期是否有效

以下是整个方法:

    function isValidDate(dtValue2) {
    // your desired pattern
    var pattern = /(0\d{1}|1[0-2])\/([0-2]\d{1}|3[0-1])\/(19|20)(\d{2})/
    var m = dtValue2.match(pattern);
    if (!m)
        return false;
    var d = new Date(dtValue2);
    // Now let's ensure that the date is not out of index


    if (d.getMonth()+1 == parseInt(m[1], 10) && d.getDate() ==parseInt(m[2], 10)) {
        return true;
    }
    return false;
}

有一个非常彻底的答案。您可以阅读使用该方法的说明和注意事项

31天月

0[13578][1[02][\/.]0[1-9][12][0-9][3[01][\/.]18[19[0-9]{2}

30天月

0[469]| 11[\/.]0[1-9]|[12][0-9]|30[\/.]18 | 19 | 20[0-9]{2}

2月1日至28日始终有效

02[\/.]0[1-9]| 1[0-9]| 2[0-8][\/.]18 | 19 | 20[0-9]{2}

2月29日也适用于闰年

02[\/.]29[\/.]18 | 19 | 2004 | 08 |[2468][048]|[13579][26]| 2000

也就是说,如果你把所有这些放在一起:

[0-9]3[0 0 0 \4077 7 7 7 7 7 7 7 7 7 7[[[13578[13578]0[13578]1[0[13578]0[13578]1[0[0[13578]1[0 0[0 0[7 7 7 7 7 7 7[0[0[0[0[0[0[0[7 7 7 7 7 7[0[0[0[0[0[0[7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7[0[0[0[0[0[0[0[0[7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7[0[0[0[0[0[7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7[0[0[0[0[0[0[7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7|02[\/.]29[\/.]18 | 19 | 2004 | 08 |[2468][048]|[13579][26]| 2000

这个版本略短,但更难理解

1[13578]0[13578]0[13578]0[13578]1[1[13578]1[0[13578]0[13578]0[13578]0[13578]1[1[1[0[13578]1[1[1[7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7[0[7]0[0[7]0[7 7 7]0[3-7 7 7 7 7 7]0[7 7 7 7]0 0[3-3-9]0[3-9]0[3-9]0[1[3-9]0[3-9]0[1[1[1[1[1[1[1[1[3-9]3-9]0[1[1[1[1[1[1[1[1-9]3-9]1[1[1[1[1[1[1-3-9]3-9]1[1[1[1[1[1[1-9[18 | 19 | 2004 | 08 |[2468][048]|[13579][26]| 2000

这些脚本很长,无法维护。应该清楚的是 这不是一个好主意,但它是可能的

注意事项:

范围1800-2099更多,可以添加没有太多困难,但需要在4-6个不同的地方进行更改 需要2个月和2天,可在约8处消除表达的严格性 [/.]作为分隔符8个位置 还没有测试过,我们可以对照所有数字组合检查它,并与avascript日期函数进行比较吗?[证明我们正在重新发明轮子]
有一个非常彻底的答案。您可以阅读使用该方法的说明和注意事项

31天月

0[13578][1[02][\/.]0[1-9][12][0-9][3[01][\/.]18[19[0-9]{2}

30天月

0[469]| 11[\/.]0[1-9]|[12][0-9]|30[\/.]18 | 19 | 20[0-9]{2}

2月1日至28日始终有效

02[\/.]0[1-9]| 1[0-9]| 2[0-8][\/.]18 | 19 | 20[0-9]{2}

2月29日也适用于闰年

02[\/.]29[\/.]18 | 19 | 2004 | 08 |[2468][048]|[13579][26]| 2000

也就是说,如果你把所有这些放在一起:

[0-9]3[0 0 0 \4077 7 7 7 7 7 7 7 7 7 7[[[13578[13578]0[13578]1[0[13578]0[13578]1[0[0[13578]1[0 0[0 0[7 7 7 7 7 7 7[0[0[0[0[0[0[0[7 7 7 7 7 7[0[0[0[0[0[0[7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7[0[0[0[0[0[0[0[0[7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7[0[0[0[0[0[7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7[0[0[0[0[0[0[7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7|02[\/.]29[\/.]18 | 19 | 2004 | 08 |[2468][048]|[13579][26]| 2000

这个版本略短,但更难理解

1[13578]0[13578]0[13578]0[13578]1[1[13578]1[0[13578]0[13578]0[13578]0[13578]1[1[1[0[13578]1[1[1[7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7[0[7]0[0[7]0[7 7 7]0[3-7 7 7 7 7 7]0[7 7 7 7]0 0[3-3-9]0[3-9]0[3-9]0[1[3-9]0[3-9]0[1[1[1[1[1[1[1[1[3-9]3-9]0[1[1[1[1[1[1[1[1-9]3-9]1[1[1[1[1[1[1-3-9]3-9]1[1[1[1[1[1[1-9[18 | 19 | 2004 | 08 |[2468][048]|[13579][26]| 2000

这些脚本很长,无法维护。应该清楚的是 这不是一个好主意,但它是可能的

注意事项:

范围1800-2099更多,可以添加没有太多困难,但需要在4-6个不同的地方进行更改 需要2个月和2天,可在约8处消除表达的严格性 [/.]作为分隔符8个位置 还没有测试过,我们可以对照所有数字组合检查它,并与avascript日期函数进行比较吗?[证明我们正在重新发明轮子] 我会尝试:

(1)20?:0[048[1248][1248[13579][[13579][[2468[[2468[[2468][2468][[2468][[[2468[048][2468[048]除除除除除除除除除除上述上述几几几几几几几几几几几几几几几几几几几几几几几几几几几几几万万在场在场在场在场在场在场在场在场在场在场在场在场在场在场在场在场在场在场在场在场在场在场在场在场在场7 7 7 7 7 7 7 7 7 7 7 7 7/////////////本本本本本本本本本本本本本本目前目前目前还还存存存存存存存存存存存存存存[1248[[1248[1248[1248[1248][[1248][1248][[[1248][[13[17[[[[1248][[[[1248][[[:19 | 20\d{2}$/ 常数testData=[ '02/02/1904', '02/12/2008', '02/29/2012', '02/29/2013', '06/31/2013', '01/31/2013', '02/02/1916', '02/02/2020', '02/02/2024', '02/02/2036', '02/02/1952', '02/02/2056', '01/01/2256', '02/29/2000', '02/29/2100', '02/29/1900', '02/29/1200', '02/29/2400' ] 对于testData的let日期{ console.log`${date}${regex.testdate}` } 我会尝试:

(1)20?:0[048[1248][1248[13579][[13579][[2468[[2468[[2468][2468][[2468][[[2468[048][2468[048]除除除除除除除除除除上述上述几几几几几几几几几几几几几几几几几几几几几几几几几几几几几万万在场在场在场在场在场在场在场在场在场在场在场在场在场在场在场在场在场在场在场在场在场在场在场在场在场7 7 7 7 7 7 7 7 7 7 7 7 7/////////////本本本本本本本本本本本本本本目前目前目前还还存存存存存存存存存存存存存存[1248[[1248[1248[1248[1248][[1248][1248][[[1248][[13[17[[[[1248][[[[1248][[[:19 | 20\d{2}$/ 常数testData=[ '02/02/1904', '02/12/2008', '02/29/2012', '02/29/2013', '06/31/2013', '01/31/2013', '02/02/1916', '02/02/2020', '02/02/2024', '02/02/2036', '02/02/1952', '02/02/2056', '01/01/2256', '02/29/2000', '02/29/2100', '02/29/1900', '02/29/1200', '02/29/2400' ] 对于testData的let日期{ console.log`${date}${regex.testdate}`
} 它验证这些格式:

YYYY-DD-MM YYYY/DD/MM YYYY.DD.MM YYYY.0M.0D YYYY/0D/0M YYYY-0D-0M YYYY-D-M YYYY.D.M YYYY/D/M等
它验证这些格式:

YYYY-DD-MM YYYY/DD/MM YYYY.DD.MM YYYY.0M.0D YYYY/0D/0M YYYY-0D-0M YYYY-D-M YYYY.D.M YYYY/D/M等

欢迎来到SO,请先看一看,然后再问:不要用regexp解析日期。为什么不使用新的日期字符串?@MaciejKozieja说明指定我使用regexonly@torazaburo我需要用正则表达式解析它。欢迎使用SO,请先看一下,然后再问:不要用regexp解析日期。为什么不使用new Datestring?@MaciejKozieja指令指定我使用regexonly@torazaburo我需要用正则表达式来解析它。实际上,你只需要在锚点之间的模式周围设置一个组-^?:0[13578]|1[02][\/.]31[\/.]19 | 20[0-9]{2}01 | 0[3-9]| 1[1-2][\/.]29日| 30 0 0 0 0よ10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 13578]1[02][\/.]31[\/.]19[0-9]{2}01[3-9]{1[1-2][\/.]29|30[\/.]19|20[0-9]{2}|0[1-9]|1[0-2][\/.]0[1-9]|1[0-9]|2[0-8][\/.]19|20[0-9]{2}|02[\/.]29[\/.]19|2004|08|[2468][048]|[13579][26]|2000$@torazaburo I在上面的问题中指出,年份限制仅为1900-2099I犯了一个小错误,我为您进行了修复。尽管这将是更好的程序流,但问题是,我只需要使用正则表达式,而不使用.test以外的任何其他函数,因此,我需要直接测试字符串以匹配正则表达式.Well.对于未来可能的项目,您有一个很好的参考。我犯了一个小错误,我为您进行了修复。尽管这将是更好的程序流程,但问题是,我只需要使用正则表达式,而不需要使用.test以外的任何其他函数,因此,我需要直接测试字符串以匹配正则表达式。嗯,您有问题吗“年值范围为1900-2099”年值范围为1900-2099“