moment.js isValid函数无法正常工作


81

我有这个问题...我还没有发现任何类似的东西,而且似乎没人感到这个问题可以用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 2013年

...为什么首先要有那些多余的字符?是否可以针对该格式正确验证更长的日期字符串?
Mathletics

多余的字符是什么意思?
Mikel Sanchez 2013年

Answers:


178

在您的问题中,您写的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
true(索引):26 true(索引):27 true(索引):29这是控制台日志输出:S
Mikel Sanchez

如果检查jsfiddle,您会注意到您没有在任何地方将true作为第三个参数传递,但是在您的问题中您声明moment('03:55jojojo', 'HH:mm',true).isValid();返回true。请在浏览器中运行该确切的代码-输出为false。
Jan Sommer 2013年

3
伙计,非常感谢,第三个参数true拯救了我的生命,我只是想说一遍,因为我一直不断地回到这个答案。
卡达伊

moment('13 / 13/2000')。isValid()返回true。您必须包括格式名称才能正确验证。
Kentonbmax

谢谢。我终于找到了正确的答案。我也缺少第三个参数。
Shwe

1

很抱歉无法回答这个已有5年历史的问题,但是我确实偶然发现了monent在使用2.24.0版本无法正常处理文档的情况。

格式

在图片中我们可以看到,例如,H应该仅求和0 - 23,但是如果我使用,moment('01', 'H', true).isValid()我仍然会得到true

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.