js 正则表达式 表示YYYY-MM-DD

新手上路,请多包涵

想问一下
js中如何判断一个字符串是否是YYYY-MM-DD 正则怎么写啊 谢谢
例如2020-01-02

阅读 5.4k
5 个回答

如果说用正则表达式,简单的用 /^\d{4}-\d{2}-\d{2}$/ 就可以进行初步验证。但是如果要验证是否合法日期,还涉及到大月小月,平年润年的问题,用正则表达式处理起来不是一般的麻烦,甚至用程序解析成数字来处理都会比较复杂。

不过这里有个简单的办法可以验证:先解析成日期对象,再格式化回去,对比是否相同就行

const judgeDate = (() => {
    function format(d) {
        return [
            d.getFullYear(),
            `${(d.getMonth() + 1)}`.padStart(2, "0"),
            `${(d.getDate())}`.padStart(2, "0"),
        ].join("-");
    }

    return s => format(new Date(s)) === s;
})();

[
    "2016-01-01",   // true
    "1324143",      // false
    "alsdjf",       // false
    "2020-02-29",   // true
].forEach(s => console.log(s, judgeDate(s)));

/^1-20-9-[0-1]{0,1}[0-9]-[0-3]{0,1}[0-9]$/

/^\d{4}(-\d{2}){2}$/

简单的就是Sure提到的/^\d{4}(-\d{2}){2}$/ 但这个对年月日判断就有问题,只能是简单的格式化判断,要进行年月日有效性判断,还需要特别处理,比如:

  1. 月份是否是01-12
  2. 日期是否在当月天数范围内,比如有大小月和平月,还有闰年处理

上面的判断,光靠规则式是处理不好的。

之前搞身份证的正则时就涉及是否是合法日期,里面对于闰年闰月是走的枚举那种,

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题