momentjs – 有没有办法用Moment JS验证时间?

有没有办法验证使用Moment JS时传递的String是否有效?

操作时刻(“2014-12-13 asdasd”,“YYYY-MM-DD LT”).isValid()或moment(“asdasd”,“LT”).isValid()等于true,理想情况下不应该发生.

我的应用程序使用多种语言,我真的不可能想出一个RegEx模式来验证字符串.例如,如果我将时间字符串设为“午前12时12分0秒”,则Moment JS应该能够验证这一点.我检查了源代码,发现时间检查在库中并不严格.我可能错过了什么.请帮忙.

解决方法

in the documentation所述,从2.3.0开始,您可以传递第三个参数true,这将打开“严格解析”模式.
moment("2014-12-13 asdasd","YYYY-MM-DD LT",true).isValid()   // false

moment("2014-12-13 12:34 PM",true).isValid()   // true

缺点是它必须完全匹配语言环境的格式.由于LT相当于英语中的h:mm A,因此它只能接受12小时不带秒.如果您通过24小时或超过秒,那么它将失败.

moment("2014-12-13 12:34:00 PM",true).isValid()   // false
moment("2014-12-13 15:00",true).isValid()         // false

更好的解决方案可能是通过严格的解析传递多种格式:

var formats = ["YYYY-MM-DD LT","YYYY-MM-DD h:mm:ss A","YYYY-MM-DD HH:mm:ss","YYYY-MM-DD HH:mm"];
moment("2014-12-13 12:34 PM",formats,true).isValid()     // true
moment("2014-12-13 15:00",true).isValid()        // true
moment("2014-12-13 12:34:00 PM",true).isValid()  // true

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...