Javascript - 确保日期格式为 YYYY-MM-DD

我正在使用一个将日期作为 YYYY-MM-DD 的 mysql 数据库。我有一个名为 dates 的数组,其中包含如此输入的值,我正在尝试检查输入的值是否采用 YYYY-MM-DD 格式,如果不是,则将它们添加到 wrongdates 数组中,但是我完全迷路了在 if 语句中检查格式是否正确的逻辑


var wrongdates = [];

for(x=0;x<dates.length<x++){

    if(.........){

        wrongdates.push(dates[x].value);

    }

}

window.alert(wrongdates);


莫回无
浏览 188回答 2
2回答

HUWWW

你可以使用regex来保证结构。const dates = ['2019-99-99', 'bla-bal-bla', '2019-11-20'];const wrongdates = dates.filter(date => !/\d{4}\-[01]\d\-[0-3]\d/.test(date));console.log(wrongdates);

慕尼黑的夜晚无繁华

我会使用正则表达式。这个应该适合你:\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01])这将检查:\d{4}&nbsp; - four digits&nbsp;&nbsp;-&nbsp; - followed by a hyphen&nbsp;&nbsp;(?:0[1-9]|1[0-2])&nbsp; - one of:&nbsp; &nbsp; a. a zero followed by any number 1 to 9 (months 01 to 09)&nbsp; &nbsp; b. a one followed by any number 0 to 2 (months 10 to 12)-&nbsp; - followed by a hyphen(?:0[1-9]|[12][0-9]|3[01])&nbsp; - using the same logic as above, any number from 01 to 31.这些更复杂的组将意味着超出可接受范围的日期(例如 2019-49-40)也将失败。如果您想接受像 2019-1-4 这样的日期(考虑到您正在使用 SQL,这可能是一个糟糕的计划,但以防万一),只需?在日期和月份部分的零之后放置一个 ( \d{4}-(?:0?[1-9]|1?[0-2])-(?:0?[1-9]|[12]?[0-9]|3?[01])),允许它们匹配0或1时间(使它们可选)。希望您注意到,如果您唯一的数据源是一个普通的旧字符串,则无法验证是否有人输入了错误的日期(即,2019 年 2 月 9 日 → 2019-02-09 和 2019-09-02 都将是“正确的”)。要在 Javascript 中执行此操作,您可以使用该RegExp.prototype.test方法。Array.prototype.filter如果您正在创建一个新数组(并且Array.prototype.map如果您正在使用 DOM 元素),您也可以利用它。const dates = [...document.querySelectorAll('input')];const wrongdates = dates.map(el => el.value).filter(date => !/\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01])/.test(date));console.log(wrongdates)<input type="text" value="2019-01-31"><input type="text" value="2019-15-52"><input type="text" value="2005-09-17"><input type="text" value="2001-06-13"><input type="text" value="2001-06-13"><input type="text" value="2001-06-13"><input type="text" value="06-28-13"><input type="text" value="Jan-12-2019">您需要!因为在匹配时RegExp.test返回true,并且您正在尝试列出不正确的日期。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript