gpt4 book ai didi

javascript - 日期格式正则表达式匹配日期分隔符

转载 作者:行者123 更新时间:2023-11-28 14:54:20 31 4
gpt4 key购买 nike

我使用下面的代码来验证 dd/mm/yyyydd.mm.yyyy 格式的日期格式。

function validateDate(date){
var matches, d, m, y, cDate, format, dateFormatObj;
dateFormatObj = { format: /^(\d{2})[./](\d{2})[./](\d{4})$/, monthPos: 2, datePos:1, yearPos:3}

format = dateFormatObj.format;
matches = format.exec(date);

d = matches[dateFormatObj.datePos];
m = matches[dateFormatObj.monthPos] - 1;
y = matches[dateFormatObj.yearPos];
cDate = new Date(y, m, d);

return cDate.getDate() == d && cDate.getMonth() == m && cDate.getFullYear() == y;
}

alert(validateDate('22/05/2017'))

这对我来说效果很好,可以验证基本日期。

我试图解决的是,如果月份、日期和年份值之间的分隔符(/或.)不同,那么它应该无效。

我尝试的是将正则表达式格式更改为 /^(\d{2})[./](\d{2})\1(\d{4})$/,基本上使用指定的相同捕获组,但这似乎不起作用,“匹配”结果为空。我读过几篇文章,但似乎缺少一些东西。我该怎么做才能使这项工作成功。

JS fiddle - https://jsfiddle.net/90dstrx5/

最佳答案

您可以按如下方式重写正则表达式:

/^(\d{2})([./])(\d{2})\2(\d{4})$/
// ^ ^
// | +---- match capturing group #2
// +----------------- capturing group #2

请注意,“数字”现在将出现在结果中的第 1、第 3 和第 4 个位置;分隔符将位于第二位置。要消除任何混淆,请使用 Array.splice() 来消除它:

function validateDate(date) {
var matches, d, m, y, cDate, format, dateFormatObj;
dateFormatObj = {
format: /^(\d{2})([./])(\d{2})\2(\d{4})$/,
monthPos: 2,
datePos: 1,
yearPos: 3
};
format = dateFormatObj.format;
matches = format.exec(date);
if (matches === null) {
return false;
}
matches.splice(2, 1);
d = matches[dateFormatObj.datePos];
m = matches[dateFormatObj.monthPos] - 1;
y = matches[dateFormatObj.yearPos];
cDate = new Date(y, m, d);
return cDate.getDate() == d && cDate.getMonth() == m && cDate.getFullYear() == y;
}
console.log(validateDate('22/05/2017')); // true
console.log(validateDate('22/05.2017')); // false

关于javascript - 日期格式正则表达式匹配日期分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43497231/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com