Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查字符串是否合法;年月日;约会?_Javascript_Jquery_String_Date_Date Format - Fatal编程技术网

Javascript 如何检查字符串是否合法;年月日;约会?

Javascript 如何检查字符串是否合法;年月日;约会?,javascript,jquery,string,date,date-format,Javascript,Jquery,String,Date,Date Format,给定一个字符串str,我如何检查它是否为dd/mm/yyyy格式并包含合法日期 一些例子: 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

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

一些例子:

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
试一试-

这个问题中有更多信息-(我回答中的代码受链接问题的严重影响)

演示-

编辑

更新答案,请尝试-

function isValidDate(strDate) {
    if (strDate.length != 10) return false;
    var dateParts = strDate.split("/");
    var date = new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]);
    if (date.getDate() == dateParts[0] && date.getMonth() == (dateParts[1] - 1) && date.getFullYear() == dateParts[2]) {
        return true;
    }
    else return false;
}
此函数通过所有测试用例。据我所知,在我纠正我原来的错误答案之前,Adam Jurczyk已经发布了一个准确的答案。他应该为此受到赞扬


演示-

您可以使用常规exp验证日期。 试着这样做:

  re = /^\d{1,2}\/\d{1,2}\/\d{4}$/; 
if(form.mydate.value != '' && !form.mydate.value.match(re))
  //do something here
注意:这仅适用于dd/mm/yyyy

为了完全符合您的要求,请使用

 re = /^\d{2}\/\d{2}\/\d{4}$/; 
编辑:下面是精确解

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

函数测试日期(str){
var t=str.match(/^(\d{2})\/(\d{2})\/(\d{4})$/);
如果(t==null)
返回false;
变量d=+t[1],m=+t[2],y=+t[3];
//下面应该是一个更精确的算法

如果(m>=1&&m=1&&d我将回答一个不同的问题,因为Misha Moroshko的问题已经得到了很好的回答:使用HTML5。也就是说,假设有问题的字符串是通过Web浏览器作为用户输入出现的,我建议将条目作为

   <input type = "date" ...

就个人而言,我认为最好的解决方案是修改用户界面,使用下拉菜单来选择月份,可能还有日期

仅仅根据输入字符串来判断2001年1月2日是1月2日还是2月1日是不可能的。

最近的发现:您可以使用lib,它添加了函数,这样您就可以只执行
Date.parseExact(dateString,“dd/MM/yyyyy”)
。当月份是
00时,它会失败,但仍然有用

仅适用于dd/mm/yyyy格式


这个正则表达式是不正确的。问题指出日期和月份必须都是两位数字。但除此之外,它无论如何都不起作用,因为它不包括每月或每年的最大天数。我只是举了一个例子,这样他就无法接近准确的数字solution@nnnnnn-您可以根据需要自定义正则表达式。它当交换月/日或给定更大的值时失败,在这种情况下会导致默认增量年的日期构造函数。更多信息:这很难看,因为它手动拆分日期字符串(基于特定于区域性的假设);更不用说它需要异常处理了。@Noldorin问题中说日期将采用“dd/mm/yyyy”格式。所以我认为这样做是安全的。@ip101:Oops,看来我误解了语言,对不起。对于JS来说,这是一个合适的解决方案!得到了我的支持。哈哈,怎么了,回答这么差(在给定的测试用例中,它至少有一半失败),具有最多的向上投票权?通常,您最好使用而不是
parseInt
将字符串转换为数字。例如,
d=+t[1]
。避免了诸如在计算当天忘记包含基数之类的问题(特别是当我们知道当天可能有前导零时)。
function IsValidDate(pText) {
    var isValid = false ;
    var t = pText.match(/^(\d{4})\/(\d{2})\/(\d{2})$/);

    if (t !== null) {
        var y = +t[1], m = +t[2], d = +t[3];
        var date = new Date(y, m - 1, d);

        isValid = (date.getFullYear() === y && date.getMonth() === m - 1) ;
    }

    return isValid ;
}
   <input type = "date" ...
^(0?[1-9]|[12][0-9]|3[01])[\/](0?[1-9]|1[012])[\/]\d{4}$