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}$