我正在尝试根据用户输入进行时间计算。在开始计算之前,我正在使用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
答案 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
我希望,它很清楚。