moment.js date validation from array of formats(来自格式数组的Moment.js日期验证)
本文介绍了来自格式数组的Moment.js日期验证的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要测试输入的日期格式是否正确。我想接受几种日期格式,所以我创建了一个验证函数来测试是否至少有一种格式是正确的,在这种情况下返回true。 我使用oment.js测试日期。 当我简单地使用硬编码字符串日期格式键入条件时,函数可以正常工作:
var multiDateValidator = function (value)
{
if ((moment(value, 'DD/MM/YYYY', true).isValid()) ||
(moment(value, 'D/M/YYYY', true).isValid()) ||
(moment(value, 'DD.MM.YYYY', true).isValid()) ||
(moment(value, 'D.M.YYYY', true).isValid()) ||
(moment(value, 'DD. MM. YYYY', true).isValid()) ||
(moment(value, 'D. M. YYYY', true).isValid())) {
return true;
}
return false;
};
但是,如果我要使用允许的日期格式列表,它不起作用,它从不返回TRUE。
var allowedDateFormats = ['DD/MM/YYYY', 'D/M/YYYY', 'DD.MM.YYYY', 'D.M.YYYY', 'DD. MM. YYYY', 'D. M. YYYY'];
var multiDateValidator = function (value)
{
allowedDateFormats.forEach(function(dateFormat)
{
if (moment(value, dateFormat, true).isValid()) {
return true;
}
});
return false;
};
第二个函数有什么问题?我知道我不太擅长JavaScript,但它应该可以用,不是吗?
推荐答案
IS不需要使用for
或forEach
循环。Moment提供了使用多种格式解析字符串的moment(String, String[], String, Boolean);
方法。
正如文档所说:
如果您不知道输入字符串的确切格式,但知道它可能是多种格式之一,则可以使用格式数组。
从版本2.3.0开始,Moment使用一些简单的试探法来确定使用哪种格式。按顺序:
- 首选导致valid日期而不是无效日期的格式。
- 首选分析更多的字符串而不是更少的字符串,并且使用更多的格式而不是更少的格式,即更严格的分析。
- 首选数组中较早的格式,而不是较晚的格式。
这里是工作现场示例:
var allowedDateFormats = ['DD/MM/YYYY', 'D/M/YYYY', 'DD.MM.YYYY', 'D.M.YYYY', 'DD. MM. YYYY', 'D. M. YYYY'];
var multiDateValidator = function (value){
return moment(value, allowedDateFormats, true).isValid();
};
var test = ['01/01/2017', '01.01.2017', '2017-Jan-01'];
for(var i=0; i<test.length; i++){
console.log(test[i], multiDateValidator(test[i]));
}
<script src="aHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbW9tZW50LmpzLzIuMTguMS9tb21lbnQubWluLmpz"></script>
这篇关于来自格式数组的Moment.js日期验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:来自格式数组的Moment.js日期验证


猜你喜欢
- Flexslider 箭头未正确显示 2022-01-01
- Fetch API 如何获取响应体? 2022-01-01
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- addEventListener 在 IE 11 中不起作用 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- 失败的 Canvas 360 jquery 插件 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- 400或500级别的HTTP响应 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01