如何检查字符串是否合法的“dd / mm / yyyy”日期? [英] How to check if a string is a legal "dd/mm/yyyy" date?

查看:133
本文介绍了如何检查字符串是否合法的“dd / mm / yyyy”日期?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

给定一个字符串 str ,我如何检查是否在 dd / mm / yyyy 格式和包含合法日期?

Given a string str, how could I check if it is in the dd/mm/yyyy format and contains a legal date ?

一些例子:

bla bla      // false
14/09/2011   //         true
09/14/2011   // false
14/9/2011    // false
1/09/2011    // false
14/09/11     // false
14.09.2011   // false
14/00/2011   // false
29/02/2011   // false
14/09/9999   //         true


推荐答案

编辑:下面的确切解决方案

exact solution below

您可以这样做,但使用更准确的日期验证算法:

You could do something like this, but with a more accurate algorithm for day validation:

function testDate(str) {
  var t = str.match(/^(\d{2})\/(\d{2})\/(\d{4})$/);
  if(t === null)
    return false;
  var d = +t[1], m = +t[2], y = +t[3];

  // Below should be a more acurate algorithm
  if(m >= 1 && m <= 12 && d >= 1 && d <= 31) {
    return true;  
  }

  return false;
}

http://jsfiddle.net/aMWtj/

日期验证alg .: http://www.eee.hiflyers.co.uk/ProgPrac/DateValidation-algorithm.pdf

Date validation alg.: http://www.eee.hiflyers.co.uk/ProgPrac/DateValidation-algorithm.pdf

精确解决方案:功能,根据您的要求返回已解析的日期或空值。

Exact solution: function that returns a parsed date or null, depending exactly on your requirements.

function parseDate(str) {
  var t = str.match(/^(\d{2})\/(\d{2})\/(\d{4})$/);
  if(t !== null){
    var d = +t[1], m = +t[2], y = +t[3];
    var date = new Date(y, m - 1, d);
    if(date.getFullYear() === y && date.getMonth() === m - 1) {
      return date;   
    }
  }

  return null;
}

http://jsfiddle.net/aMWtj/2/

这篇关于如何检查字符串是否合法的“dd / mm / yyyy”日期?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆