在我的表单中,用户可以输入如下日期:220875
(日,月,年)。
一旦他们输入了详细信息,我想测试日期是否有效:
如何判断值是否正确且匹配?
这是我的尝试:(摘录)
DateIsOk:function(value) { //220875 for example
var formatValue = value.match(/.{1,2}/g), //splting as 22 08 75
fieldDate = parseInt(formatValue[0]), //converting to num
fieldMonth = parseInt(formatValue[1]),
fieldYear = parseInt(formatValue[2]),
dayobj = new Date();
//test need to go here...
}
如果有帮助,这里是Live Demo。
答案 0 :(得分:1)
您似乎使用DD / MM / YYYY格式。
因此,您可以轻松使用此即用型代码:http://www.qodo.co.uk/blog/javascript-checking-if-a-date-is-valid/
<强>的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;
}
}
答案 1 :(得分:1)
如果您不介意将momentjs
用作@hVostt建议,您可以尝试修改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;
}
}
...
这是更新后的Live Demo
答案 2 :(得分:0)
js正则表达可能就像这样
/([0-2][0-9]|3[01])(0[1-9]|1[0-2])(\d{2})/
答案 3 :(得分:0)
请尝试Moment.js及其验证功能:
http://momentjs.com/docs/#/parsing/is-valid/
moment([2014, 25, 35]).isValid();
moment("2014-25-35").isValid();