gpt4 book ai didi

javascript - 如何禁止 javascript 中的宽松日期?

转载 作者:行者123 更新时间:2023-11-30 08:45:44 29 4
gpt4 key购买 nike

我正在尝试验证字符串是否为有效日期。 Date.parse(dateString)new Date(dateString) 都非常宽松。例如,像 14/14/2000 这样的日期显示为 2/14/2001。我尝试了一个正则表达式,但现在我需要验证的不仅仅是 mm/dd/yyyy,我还需要验证 yyyy-mm-ddThh:mm:ss 例如1951-02-05T00:00:00

我现在正在使用正则表达式和一些基本的日期检查,但上面的第二种日期格式无法通过正则表达式。

function isDate(dateToCheck) {
if (dateToCheck == "" || dateToCheck == null) { return true; }
var timestamp = Date.parse(dateToCheck);
var d = new Date(timestamp);
var re = /(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.](19|20)\d\d/;

var valid = re.test(dateToCheck);
valid = valid && !isNaN(timestamp);
valid = valid && d.getFullYear() > 1900 && d.getFullYear() < 2100;
return valid;
}

正则表达式专门用于 mm/dd/yyyy,其中月份和日期都是两位数(个位数的月份有一个前导零)并且不允许无效的月份或日期,例如 14月或 32 日。年份可以是 1900 到 2099 之间的任何值。

这不是气密的。它将允许 02/31/2000,这是无效的,因为二月从来没有 31 天。

如何在不允许宽松日期的情况下验证这两种日期格式?

最佳答案

查看 moment.js 及其所有解析选项。

http://momentjs.com/docs/#/parsing/string/

它们是一个 isValid() 函数,您可以使用它来验证输入字符串是否正确。

moment("not a real date").isValid(); // false

如果您将其与日期验证字符串结合使用,那么您将获得所需的结果: http://momentjs.com/docs/#/parsing/string-formats/

var m = moment('14/14/2000', 'DD/MM/YYYY');
console.log(m.toString(),m.isValid());
//"Not a valid date"
//false

更新:我做了一个 test harness on JS-Bin with your full sample data.这是使用 Moment.js 的完整工作示例代码。在返回 isValid() 之前,您可以指定多种格式进行尝试。

function momentIsDate (dateToCheck) {
return moment(dateToCheck, [
'DD/MM/YYYY',
'YYYY-MM-DDTHH:mm:ss'
]).isValid();
}

关于javascript - 如何禁止 javascript 中的宽松日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22176766/

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