有没有一种方法可以验证使用Moment JS作为时间传递的字符串是否有效?
理想情况下不应发生的操作moment("2014-12-13 asdasd","YYYY-MM-DD LT").isValid()
或moment("asdasd","LT").isValid()
等同操作true
。
我的应用程序使用多种语言,实际上我不可能提出RegEx模式来验证字符串。例如,如果我将时间字符串获取为"午前12時12分0秒"
,则Moment JS应该能够对此进行验证。我检查了源,发现库中的时间检查不是那么严格。我可能错过了一些东西。请帮忙。
如文档中所述,从2.3.0版本开始,您可以传递第三个参数true
,以打开“严格解析”模式。
moment("2014-12-13 asdasd","YYYY-MM-DD LT", true).isValid() // false
moment("2014-12-13 12:34 PM","YYYY-MM-DD LT", true).isValid() // true
不利的一面是,它必须与语言环境的格式(即作为第二个参数提供的格式)完全匹配。由于LT
与h:mm A
英语等效,因此它将仅接受12个小时的时间,而无需秒。如果您经过24小时或秒,那么它将失败。
moment("2014-12-13 12:34:00 PM","YYYY-MM-DD LT", true).isValid() // false
moment("2014-12-13 15:00","YYYY-MM-DD LT", 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", formats, true).isValid() // true
moment("2014-12-13 12:34:00 PM", formats, true).isValid() // true
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句