来自格式数组的Moment.js日期验证

本教程将介绍来自格式数组的Moment.js日期验证的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

来自格式数组的Moment.js日期验证 教程 第1张

问题描述

我需要测试输入的日期格式是否正确。我想接受几种日期格式,所以我创建了一个验证函数来测试是否至少有一种格式是正确的,在这种情况下返回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不需要使用forforEach循环。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="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

好了关于来自格式数组的Moment.js日期验证的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。