我正在使用具有特定格式字符串的正则表达式检查时刻字符串是否正确:
const isCorrect = isCorrectFormat('12/06/2016 20:20:20:444')
和 isCorrectFormat 功能:
const isCorrectFormat = (dateString) => {
const regex = /[0-3][0-9][/][0-9]{2}[/][0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]*/
return regex.test(dateString)
}
当然,在这种情况下,结果将是 false ,因为它没有使用相同的格式。
我现在要解决的问题是将格式也作为参数发送,但我不想使用正则表达式,而是直接使用moment格式的表示。
const isCorrect = isCorrectFormat(
'12/06/2016 20:20:20:444',
'MM/DD/YYYY HH:mm:ss.SSS'
)
但是我不知道如何实现它......我在文档中发现了一下,我没有看到任何方法来测试它。有什么想法吗?
非常感谢!!
答案 0 :(得分:8)
您可以使用strict parsing和isValid
方法。
如moment(String, String)
文档中所述:
Moment的解析器非常宽容,这可能导致意外/意外行为。
从版本 2.3.0 开始,您可以为最后一个参数指定一个布尔值,以使Moment使用严格的解析。严格的解析要求格式和输入完全匹配,包括delimeters 。
此处有工作样本:
const isCorrectFormat = (dateString, format) => {
return moment(dateString, format, true).isValid()
}
const isCorrect = isCorrectFormat(
'12/06/2016 20:20:20:444',
'MM/DD/YYYY HH:mm:ss.SSS'
)
console.log(isCorrect);

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
&#13;
答案 1 :(得分:0)
您可以使用:
var date = moment('12/06/2016 20:20:20:444', 'MM/DD/YYYY HH:mm:ss.SSS');
然后使用瞬间验证:
date.isValid(); // returns true or false