如何使用片刻测试字符串是否有效?

Val*_*mas 39 javascript validation jquery date momentjs

我想测试输入的日期和时间是否有效.

这可以用时间来完成,因为日期和时间测试使用javascript似乎是一场噩梦.(花了几个小时).

测试数据看起来像这样.

无效

invalid = ""
invalid = " "
invalid = "x"
invalid = "1/1"
invalid = "30/2/2015"
invalid = "2/30/2015"
Run Code Online (Sandbox Code Playgroud)

已验证

isvalid = "1/12/2015"
isvalid = "1/12/2015 1:00 PM";
Run Code Online (Sandbox Code Playgroud)

尝试了各种javascript方法,试用数小时失败.

我想当下会有一些东西.所以试过以下,所有这些都不起作用,因为我不认为时刻是这样的.

var valid = moment(input).isDate()
var valid = moment().isDate(input)
Run Code Online (Sandbox Code Playgroud)

我的时间格式是"dd/mm/yyyy"

Luc*_*oli 96

Moment有一个名为isValid的函数.

您希望将此函数与目标日期格式严格解析参数一起使用(否则您的验证可能不一致),以便将所有必需的检查(如闰年)委托给库:

var dateFormat = "DD/MM/YYYY";
moment("28/02/2011", dateFormat, true).isValid(); // return true
moment("29/02/2011", dateFormat, true).isValid(); // return false: February 29th of 2011 does not exist, because 2011 is not a leap year
Run Code Online (Sandbox Code Playgroud)

  • 我认为这个答案应该是公认的答案.isValid()函数能够处理诸如闰年之类的事情,并且您没有像当前接受的答案那样进行所有字符串比较. (6认同)
  • 您可能还需要使用第三个参数:从版本2.3.0开始,您可以为最后一个参数指定一个布尔值,以使Moment使用严格的解析.http://stackoverflow.com/questions/19978953/moment-js-isvalid-function-not-doing-properly/19979768#answer-19979768 (5认同)

Kok*_*zzu 35

是的,您可以使用momentjs来解析它并将其与字符串进行比较

function isValidDate(str) {
  var d = moment(str,'D/M/YYYY');
  if(d == null || !d.isValid()) return false;

  return str.indexOf(d.format('D/M/YYYY')) >= 0 
      || str.indexOf(d.format('DD/MM/YYYY')) >= 0
      || str.indexOf(d.format('D/M/YY')) >= 0 
      || str.indexOf(d.format('DD/MM/YY')) >= 0;
}
Run Code Online (Sandbox Code Playgroud)

测试代码

tests = ['',' ','x','1/1','1/12/2015','1/12/2015 1:00 PM']
for(var z in tests) {
  var test = tests[z];
  console.log('"' + test + '" ' + isValidDate(test));
}
Run Code Online (Sandbox Code Playgroud)

产量

 "" false
 " " false
 "x" false
 "1/1" false
 "1/12/2015" true
 "1/12/2015 1:00 PM" true
Run Code Online (Sandbox Code Playgroud)