moment.js的isValid函数不能正常工作

86

我有一个问题...我没有找到任何类似的东西,而且似乎很奇怪,没有人在使用moment.js验证时间时遇到过这个问题。

moment('03:55', 'HH:mm').isValid(); //true
moment('03:55jojojo', 'HH:mm').isValid(); //true
moment('03:55jojojo', 'HH:mm',true).isValid(); //true

我做错了什么吗? 这里有一个例子:

http://jsfiddle.net/vCGAp/145/


3
我只能猜测他们明确测试传递的格式,但没有检查“值的长度是否与格式相同”... 我建议尝试向 moment.js 提交错误报告。 - scunliffe
为什么你一开始就有那些额外的字符?它能正确地验证那种格式的更长日期字符串吗? - Evan Davis
你说的“额外字符”是什么意思? - Mikel Sanchez
2个回答

187

您在问题中写道moment('03:55jojojo', 'HH:mm',true).isValid();返回true。这是不正确的。请再次检查您的jsfiddle。

http://momentjs.com/docs/

Moment解析器非常宽容,这可能导致意外的行为。从版本2.3.0开始,您可以为最后一个参数指定布尔值,使Moment使用严格的解析。严格解析要求格式和输入完全匹配。

moment('It is 2012-05-25', 'YYYY-MM-DD').isValid();        // true
moment('It is 2012-05-25', 'YYYY-MM-DD', true).isValid();  // false
moment('2012-05-25', 'YYYY-MM-DD', true).isValid();        // true

你可以同时使用语言和严谨性。

moment('2012-10-14', 'YYYY-MM-DD', 'fr', true);

1
这是控制台日志输出:S - Mikel Sanchez
如果您检查 jsFiddle,您会注意到在任何地方都没有将 true 作为第三个参数传递,但是在您的问题中,您声明 moment('03:55jojojo', 'HH:mm',true).isValid(); 返回 true。请在浏览器中运行这段代码 - 输出结果为 false。 - Jan Sommer
moment('13/13/2000').isValid() 返回 true。您必须包含格式指定才能正确验证。 - Kentonbmax

2

很抱歉打扰这个五年前的问题,但我确实遇到了一个情况,moment在文档中没有正常工作,使用版本2.24.0。

Formats

从图片中我们可以看到例如H应该只评估为0 - 23,但是如果我使用moment('01','H',true).isValid(),我仍然得到true

这里是jsfiddle:https://jsfiddle.net/wofgst5v/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接