2014-09-25 63 views
7

有沒有一種方法來驗證使用Moment JS作爲時間傳遞的字符串是否有效?有沒有一種方法來驗證使用Moment JS的時間?

操作moment("2014-12-13 asdasd","YYYY-MM-DD LT").isValid()moment("asdasd","LT").isValid()相當於true理想情況下不應該發生。

我的應用程序使用多種語言,我真的不可能想出一個RegEx模式來驗證字符串。例如,如果我得到的時間字符串爲"午前12時12分0秒",Moment JS應該能夠驗證這一點。我查了一下資料來源,發現圖書館的時間檢查並不那麼嚴格。我可能錯過了一些東西。請幫忙。

回答

15

如描述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","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 
+0

感謝您指出了這一點。我打算使用moment()._ lang._longDateFormat.LT來驗證字符串,它會隨着語言環境而改變,並且應該可以正常工作。 – Chiranjib 2014-09-28 04:49:15

+1

如果您使用的是當前版本(2.2.0+),請改爲使用:'moment.localeData()。longDateFormat('LT')'。 [docs here](http://momentjs.com/docs/#/i18n/locale-data/) – 2014-09-28 06:31:21

+0

再次感謝您。會做。 – Chiranjib 2014-09-29 06:45:55

相關問題