5

我有一个 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;
    }           
  }
}
4

6 回答 6

6

您可以使用正则表达式通过 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");
  }
}
于 2012-04-17T15:57:50.860 回答
1

你看过 Moment.js 的 JavaScript 库吗?

http://momentjs.com/

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

于 2012-04-17T15:53:16.893 回答
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
于 2012-04-17T16:17:13.850 回答
0

查看正则表达式的 MDN 指南。您将需要有关与数字匹配的字符类的信息 - 搜索“匹配数字字符”短语;以及一种指定精确匹配长度的方法 - 在本指南中搜索“匹配前一个字符的 n 次出现”短语。

于 2012-04-17T15:49:35.367 回答
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);
于 2012-04-17T16:24:42.987 回答
0

验证日期包括所有角色,例如 2 月 28 日和 leep 年 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;
        }

    }
于 2019-06-14T20:48:47.657 回答