【问题标题】:Javascript dd/mm/yyyy date check?Javascript dd/mm/yyyy 日期检查?
【发布时间】:2012-04-17 15:44:39
【问题描述】:

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

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

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

任何 cmets 将不胜感激。只有第一次做 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;
    }           
  }
}

【问题讨论】:

  • 我无意冒犯,但我不认为在谷歌上搜索脚本以使用算作“做 javascript”:-) 发布您尝试过的内容和您的 HTML 会给人们一个位置开始。
  • 有上百万种可能的方法——具体有帮助! (有多少可能的日期字段?在提交或用户输入文本时进行验证?当它不是有效条目时会发生什么行为?)
  • @Pointy :好吧,我只是个学生,教科书没用,所以谷歌是第二个选择。我几乎尝试了所有不使用任何外部库、数组、php、.ASAP 或 jQuery 等的脚本。我只能使用 javascript。没有任何效果。
  • @user1090190 :只有一个名为“dateofbirth”的日期字段。并验证 onSubmit。无效时返回 false 和 Alert,例如“日期格式无效。请输入 dd/mm/yyyy”
  • @silentauror 听起来你知道你需要做什么的流程。当您实施自己的解决方案时,为什么不使用谷歌搜索特定的问题,而不是搜索特定的解决方案? IE,“javascript hook onsubmit”,“regex date”等。组装这些片段应该让您了解它的实际工作原理,并帮助您走上正确的道路;不会复制和粘贴已完成的解决方案。

标签: javascript html validation


【解决方案1】:

您可以使用正则表达式通过 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");
  }
}

【讨论】:

  • 我确定这应该可以正常工作,而且看起来不错,但我使用了它,但仍然无法正常工作。太令人沮丧了。
  • 您传递的输入类型。我在gskinner.com/RegExr 上测试了正则表达式,它对你的模式起作用
  • 请注意,虽然此正则表达式会尝试确保有效日期,但它不会(尤其是闰年)。鉴于此,为什么不直接选择/\d{1,2}/\d{1,2}/\d{4}
  • 我发布了我在问题中尝试的最新代码...哪里出错了?
  • 也感谢@Phrogz 编辑问题。无法阻止所有代码。 :)
【解决方案2】:

您看过 Moment.js javascript 库吗?

http://momentjs.com/

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

【讨论】:

  • 很遗憾无法使用外部库。
【解决方案3】:

我发现的最好的 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

【讨论】:

  • 嗨。如果我可以使用外部库,那就太好了。这个项目我不能。
  • 这不起作用。例如,Parse("05/15/1999") 返回现有日期。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

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

    提示:当使用正则表达式测试字符串的有效性时,您应该使用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);
    

    【讨论】:

    • 对不起,我真的是 javascript 的新手......我将在哪里实现这个:return /^\d{2}/\d{2}/\d{4}$/.test (str); ??
    • @silentauror 如果你不想像我一样把它包装成一个函数(在第一个代码示例中;第二个只是我没有重复自己)那么你可以使用var isValidLookingDate = /.../.test(str);
    • 这样吗? { var x= document.forms["signup"]["dateofbirth"].value; var isvalid = /^\d{1,2}/\d{1,2}/\d{4}$/.test(x); if (isvalid.match(x)) { return true; } else { alert("Please enter dd/mm/yyyy"); return false; } 出现语法错误并且它不起作用.. 现在我只是让自己感到困惑。这太令人沮丧了。 (ps。不能在评论中得到空格,但它在空格和缩进方面的格式正确)
    【解决方案6】:

    验证日期包括所有角色,例如 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;
            }
    
        }
    

    【讨论】:

      猜你喜欢
      • 2014-05-30
      • 2013-11-18
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多