为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

莫回无 2022-01-13 17:25:39
我正在使用一个将日期作为 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);
查看完整描述

2 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

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


查看完整回答
反对 回复 2022-01-13
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

我会使用正则表达式。这个应该适合你:


\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如果您正在创建一个新数组(并且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,并且您正在尝试列出不正确的日期。


查看完整回答
反对 回复 2022-01-13
  • 2 回答
  • 0 关注
  • 187 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信