我正在尝试找出正确的正则表达式来断言以下格式的日期: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/;
正如评论中已经提到的:您的正则表达式工作“正常”,但它最终不会检查有效日期,因为它不知道不同月份的长度以及闰年的影响。
以下
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)])));