使用momentjs进行时间验证

时间:2015-06-16 14:24:18

标签: javascript momentjs

我正在尝试根据用户输入进行时间计算。在开始计算之前,我正在使用momentjs来验证用户输入的时间。这似乎很奇怪。例如,这是浏览器控制台中未定义的输入:

>moment(undefined).isValid()
>true

如何使用momentjs验证用户输入?

编辑:

似乎在严格模式下,您可以使用时区缩写(EEST)验证其他所有内容:

Tue May 05 2015 12:00:00 GMT+0300 (EEST)

由于浏览器不兼容,不推荐使用缩写的z参数:https://github.com/moment/moment/issues/162

1 个答案:

答案 0 :(得分:1)

如果限制输入日期的模式 - 您必须使用以下内容:

checksDate = moment(date, ['DD-MMMM-YYYY', 'DD.MM.YYYY', 'MM/DD/YYYY', 'YYYY-MM-DD'], true);

这个数组的位置:

['DD-MMMM-YYYY', 'DD.MM.YYYY', 'MM/DD/YYYY', 'YYYY-MM-DD']

是你的模式。 我的时刻语句中的第三个参数定义了moment.js必须使用严格模式。这意味着你无法使用"。"相反" - "以ISO格式:" 1990-09-01",例如。 在文档中,您可以看到以下短语:

  

Moment的解析器非常宽容,这可能导致不受欢迎   行为。从版本2.3.0开始,您可以为最后一个指定布尔值   使Moment使用严格解析的参数。严格的解析需要   格式和输入完全匹配。

在浏览器的控制台中:

moment(undefined).isValid()
true
moment(undefined, [], true).isValid()
false

但强烈推荐使用我在上面的例子中使用的模式。 因为没有它,moment.js可能会在这个日期出错: "01.11.2000""11.01.2000" - 它可以是相似的日期,然后您使用任意用户输入。

了解更多: moment.js Docs about validation

我希望,它很清楚。