包含单位数月份和日期的 mm/dd/yy 格式的正则表达式是什么? [已关闭]

问题描述 投票:0回答:1

我正在尝试找出正确的正则表达式来断言以下格式的日期:mm/dd/yy。日期可以显示单位数和两位数的月份和日期。个位数前面没有零。 所以 2024 年 1 月 1 日看起来像这样:1/1/2024。

下面是我在 Cypress 中用于断言的内容,但是当月份、日期或两者都包含单个数字时,它会失败。谁能告诉我可能是什么问题?

var dateFormatRegex= /(0?[1-9]|1[012])[- \/.](0?[1-9]|[12][0-9]|3[01])[- \/.](19|20)\d\d/;
javascript regex cypress
1个回答
0
投票

正如评论中已经提到的:您的正则表达式工作“正常”,但它最终不会检查有效日期,因为它不知道不同月份的长度以及闰年的影响。

以下

datchk()
函数使用您的正则表达式作为第一次检查,然后继续涉及
Date
对象的第二次检查,以确定给定日期字符串的有效性:

const dates=`2/31/2019
02.29.2016
05/47/2024
6/29/1989
12/31/1910`.split("\n"),
  rx=/(0?[1-9]|1[012])[- \/.](0?[1-9]|[12][0-9]|3[01])[- \/.]((19|20)\d\d)/;

function datchk(d){
 const da=d.match(rx);
 if(da){
   const s=`${da[3]}-${da[1].padStart(2,"0")}-${da[2].padStart(2,"0")}`,
   dat=new Date(s);
   return dat.toISOString().slice(0,10)==s
 }
 else return false;
}

console.log(Object.fromEntries(dates.map(d=>[d,datchk(d)])));

© www.soinside.com 2019 - 2024. All rights reserved.