Javascript dd / mm / yyyy日期检查?

时间:2012-04-17 15:44:39

标签: javascript html validation

我有一个html表单字段,人们可以输入这样编码的日期:

input type="text" name="dateofbirth" placeholder="dd/mm/yyyy"

我正在尝试查找JavaScript以检查日期是否以dd/mm/yyyy格式输入(所以10个字符,2/2/4)

任何意见将不胜感激。只有第一次做javascript并且一直很好,直到这个打嗝。

编辑:代码(表单名称为'注册)

// JavaScript Document
function validateForm(signup) {
  {
    var x = document.forms["signup"]["dateofbirth"].value;
    var reg = /(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d/;
    if (x.match(reg)) {
      return true;
    }
    else {
      alert("Please enter dd/mm/yyyy");
      return false;
    }           
  }
}

6 个答案:

答案 0 :(得分:2)

您可以使用正则表达式通过javascript使用您提供的格式验证日期。示例代码如下所示。

function(input){
  var reg = /(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d/;
  if (input.match(reg)) {
    alert("Input matched");
  else {
    alert("Please enter dd/mm/yyyy");
  }
}

答案 1 :(得分:1)

你看过Moment.js javascript库吗?

http://momentjs.com/

我没有使用它,但我打算将我的Javascript代码迁移到它。

答案 2 :(得分:1)

我找到的最好的JavaScript日期库是http://code.google.com/p/datejs/

的date.js

它也具有文化意识,因此要验证您的dd / mm / yyyy日期(我假设您不在美国),请使用Date.parse,如下所示

var d1 = Date.parse("01/12/2004"); // returns a valid JavaScript date
var d2 = Date.parse("30/02/2004"); // returns null

答案 3 :(得分:0)

查看MDN guide for regular expressions。您将需要与数字匹配的字符类信息 - 搜索“匹配数字字符”短语;以及指定确切匹配长度的方法 - 在本指南中搜索“匹配前一个字符的恰好n次出现”短语。

答案 4 :(得分:0)

您是否查看过Web浏览器的错误控制台以确保没有引发JS语法或运行时错误?您附加到问题的JavaScript代码是无效令人惊讶(您有一个额外的{}包裹您的函数体。)

提示:使用正则表达式测试字符串的有效性时,您应该使用if (regex.test(str))而不是if (str.match(regex))来简化性能和自我记录。

根据您的要求,我会这样做:

function isDDMMYYYY(str){
  return /^\d{2}/\d{2}/\d{4}$/.test(str);
}

但是,我个人会更改要求,以允许用户输入一位数的日期和月份:

return /^\d{1,2}/\d{1,2}/\d{4}$/.test(str);

答案 5 :(得分:0)

验证日期包括所有角色,例如12月28日和29年

function leapYear(year) {
    return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
}



function validateDayMonth(day, month, year) {
        var months = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"];
        var days = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"];
        if (months.indexOf(month) != -1 && days.indexOf(day) != -1) {
            if ((month == '02' && day == '29' && leapYear(year) == false) || (month == '02' && day == '30') || (month == '02' && day == '31') || (month == '04' && day == '31') || (month == '06' && day == '31') || (month == '09' && day == '31') || (month == '11' && day == '31')) {
                return false;
            } else {
                var GivenDate = year + '-' + month + '-' + day;
                var CurrentDate = new Date();
                GivenDate = new Date(GivenDate);
                if (GivenDate > CurrentDate) {
                    return false;
                } else {
                    return true;
                }
            }
        } else {
            return false;
        }

    }