我正在使用日期为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);
答案 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])
),以使它们匹配0
或1
次(将其设置为可选)。
希望您注意到,如果您唯一的数据源是一个纯旧的字符串,则无法验证是否有人输入了错误的日期(即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
,并且您要列出不正确日期的列表。