moment.js isValid 函数无法正常工作
Posted
技术标签:
【中文标题】moment.js isValid 函数无法正常工作【英文标题】:moment.js isValid function not working properly 【发布时间】:2013-11-27 12:57:48 【问题描述】:我有这个问题...我没有发现任何类似的东西,而且似乎很奇怪没有人在使用 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/
【问题讨论】:
我只能猜测他们明确测试您传递的格式是否经过测试...但是没有检查“值与格式的长度是否相同?”...我建议尝试向 moment.js 提交错误报告 ...为什么一开始会有这些多余的字符?它是否针对该格式正确验证较长的日期字符串? 多余的字符是什么意思? 【参考方案1】:在您的问题中,您写道moment('03:55jojojo', 'HH:mm',true).isValid();
返回真。这是不正确的。请再次检查您的 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);
【讨论】:
true (index):26 true (index):27 true (index):29 这是控制台日志输出:S 如果您检查您的 jsfiddle,您会注意到您没有在任何地方将 true 作为第三个参数传递,但在您的问题中您声明moment('03:55jojojo', 'HH:mm',true).isValid();
返回 true。请在您的浏览器中运行该确切代码 - 输出为 false。
moment('13/13/2000').isValid() 返回真。您必须包含格式名称才能正确验证。【参考方案2】:
很抱歉解决了这个 5 年前的问题,但我确实偶然发现了 monent 使用 2.24.0 版本无法正常处理文档的情况。
在图片中我们可以看到,例如H
应该只计算为0 - 23
,但如果我使用moment('01', 'H', true).isValid()
,我仍然会得到true
。
这里是 jsfiddle:https://jsfiddle.net/wofgst5v/
【讨论】:
以上是关于moment.js isValid 函数无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
Moment.js:moment(string,format)源码解析