Javascript 如何测试输入为2位数字的日期、月份和年份是否有效?
在我的表单中,用户可以这样输入日期:Javascript 如何测试输入为2位数字的日期、月份和年份是否有效?,javascript,jquery,date,Javascript,Jquery,Date,在我的表单中,用户可以这样输入日期:220875(天、月、年) 一旦他们输入了详细信息,我想测试日期是否有效: 月份从1月到12月(含12月) 输入的日期对指定月份有效 我如何确定这些值是否正确且匹配 以下是我的尝试:(节选) 如果有用的话,这里有一个.js regexp可能是这样的 /([0-2][0-9]|3[01])(0[1-9]|1[0-2])(\d{2})/ 您似乎使用了DD/MM/YYYY格式 因此,您可以轻松地使用此即用代码: JavaScript // Checks a str
220875
(天、月、年)
一旦他们输入了详细信息,我想测试日期是否有效:
如果有用的话,这里有一个.js regexp可能是这样的
/([0-2][0-9]|3[01])(0[1-9]|1[0-2])(\d{2})/
您似乎使用了DD/MM/YYYY格式
因此,您可以轻松地使用此即用代码:
JavaScript
// Checks a string to see if it in a valid date format
// of (D)D/(M)M/(YY)YY and returns true/false
function isValidDate(s) {
// format D(D)/M(M)/(YY)YY
var dateFormat = /^\d{1,4}[\.|\/|-]\d{1,2}[\.|\/|-]\d{1,4}$/;
if (dateFormat.test(s)) {
// remove any leading zeros from date values
s = s.replace(/0*(\d*)/gi,"$1");
var dateArray = s.split(/[\.|\/|-]/);
// correct month value
dateArray[1] = dateArray[1]-1;
// correct year value
if (dateArray[2].length<4) {
// correct year value
dateArray[2] = (parseInt(dateArray[2]) < 50) ? 2000 + parseInt(dateArray[2]) : 1900 + parseInt(dateArray[2]);
}
var testDate = new Date(dateArray[2], dateArray[1], dateArray[0]);
if (testDate.getDate()!=dateArray[0] || testDate.getMonth()!=dateArray[1] || testDate.getFullYear()!=dateArray[2]) {
return false;
} else {
return true;
}
} else {
return false;
}
}
//检查字符串是否为有效的日期格式
//of(D)D/(M)M/(YY)YY并返回true/false
函数isValidDate(s){
//格式D(D)/M(M)/(YY)YY
var dateFormat=/^\d{1,4}[\.\124;\/-]\ d{1,2}[\.\124;\/-]\ d{1,4}$/;
if(日期格式测试){
//从日期值中删除任何前导零
s=s.replace(/0*(\d*)/gi,“$1”);
var dateArray=s.split(/[\.\/\-]/);
//正确月份值
dateArray[1]=dateArray[1]-1;
//正确年份值
如果(dateArray[2]。长度,请尝试使用以下验证函数:
如果您不介意按照@hvost的建议使用,可以尝试修改DateIsOk()
验证函数,如下所示:
...
dateParts : ["years", "months", "days", "hours", "minutes", "seconds", "milliseconds"],
DateIsOk:function(value) {
var dayobj = moment(value, "DDMMYY");
if (dayobj.isValid()) {
this.errorHandler(true);
return true;
}
else {
this.errorHandler('Invalid ' + this.dateParts[dayobj.invalidAt()]);
return false;
}
}
...
这是更新后的你是在问如果(fieldMonth>12)
如何做吗?我正在尝试使用Date对象进行验证。这可能吗?特别是发送像这个新日期(ddmmyy)这样的值,因为在2月份甚至可以得到28天的时间?我同意。通过独立的base检查值。例如,如果我给出日期“300275”-二月没有“30”。它给出的是“true”。是的,二月问题将通过修补js检查解决。也许您可以在regexp测试后添加它。但另一个问题是,二月在不同的年份有不同的天数。必须特别检查。
moment([2014, 25, 35]).isValid();
moment("2014-25-35").isValid();
...
dateParts : ["years", "months", "days", "hours", "minutes", "seconds", "milliseconds"],
DateIsOk:function(value) {
var dayobj = moment(value, "DDMMYY");
if (dayobj.isValid()) {
this.errorHandler(true);
return true;
}
else {
this.errorHandler('Invalid ' + this.dateParts[dayobj.invalidAt()]);
return false;
}
}
...