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

时间:2019-11-27 20:35:47

标签: javascript

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

var wrongdates = [];
for(x=0;x<dates.length<x++){
    if(.........){
        wrongdates.push(dates[x].value);
    }
}
window.alert(wrongdates);

2 个答案:

答案 0 :(得分:2)

您可以使用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);

答案 1 :(得分:1)

我将使用正则表达式。这应该为您工作:

\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01])

这将检查:

\d{4}
  - four digits  
-
  - followed by a hyphen  
(?:0[1-9]|1[0-2])
  - one of:
    a. a zero followed by any number 1 to 9 (months 01 to 09)
    b. a one followed by any number 0 to 2 (months 10 to 12)
-
  - followed by a hyphen
(?:0[1-9]|[12][0-9]|3[01])
  - 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])),以使它们匹配01次(将其设置为可选)。

希望您注意到,如果您唯一的数据源是一个纯旧的字符串,则无法验证是否有人输入了错误的日期(即2019年2月9日→2019-02-09和2019-09-02都是“正确的”)。


要使用Javascript执行此操作,可以使用RegExp.prototype.test方法。如果要创建新数组,还可以利用Array.prototype.filter(如果要使用DOM元素,则可以利用Array.prototype.map)。

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,并且您要列出不正确日期的列表。