表格日期(yyyy-mm-dd)验证。

时间:2015-08-05 06:46:00

标签: javascript jquery regex forms validation

在我的验证文件中,我有一个“准备数据”功能,它将来自DOM的数据保存为JSON并将其作为data.applicants.occupation_since返回:

applicants.occupation_since = mainAppContainer.find(".employmentPeriodStart").val()

然后在“验证”功能中验证它:

        var validateOccupationCompany, validateOccupationSince;
if (data.applicants[0].occupation === 'full_time' || data.applicants[0].occupation === 'hourly' || data.applicants[0].occupation === 'part_time' || data.applicants[0].occupation === 'finite_time') {
   validateOccupationCompany = true;
  validateOccupationSince = true;
}

var dateVal, dateValues, dtDay, dtMonth, dtYear, isleap, validatePattern;
if (validateOccupationSince) {
  dateVal = data.applicants[0].occupation_since;
  validatePattern = /^(\d{4})(\/|-)(\d{1,2})(\/|-)(\d{1,2})$/;
  dateValues = dateVal.match(validatePattern);
  dtYear = dateValues[1];
  dtMonth = dateValues[3];
  dtDay = dateValues[5];
  if (validatePattern.test(dateVal) !== true) {
    ret.status = false;
    ret.errorMessages.push("SOME ERROR MSG");
    ret.errorClasses.push(".employmentPeriodStart");
  } else if (dtMonth < 1 || dtMonth > 12) {
    ret.status = false;
    ret.errorMessages.push("SOME ERROR MSG.");
ret.errorClasses.push(".employmentPeriodStart");
  } else if (dtDay < 1 || dtDay > 31) {
    ret.status = false;
    ret.errorMessages.push("SOME ERROR MSG.");
    ret.errorClasses.push(".employmentPeriodStart");
  } else if ((dtMonth === 4 || dtMonth === 6 || dtMonth === 9 || dtMonth === 11) && dtDay === 31) {
ret.status = false;
ret.errorMessages.push("SOME ERROR MSG.");
ret.errorClasses.push(".employmentPeriodStart");
  } else if (dtMonth === 2) {
isleap = dtYear % 4 === 0 && (dtYear % 100 !== 0 || dtYear % 400 === 0);
if (dtDay > 29 || (dtDay === 29 && !isleap)) {
  ret.status = false;
  ret.errorMessages.push("SOME ERROR MSG.");
  ret.errorClasses.push(".employmentPeriodStart");
}
}
}

我一直试图让它工作一段时间并且无法解决它,它看起来有点混乱。

另一种解决方案很好,或者如果你能指出我正确的方向。

2 个答案:

答案 0 :(得分:1)

我们一直在努力使用日期,时间和日期时间及其格式。

我强烈建议您使用MomentJs

答案 1 :(得分:0)

对于日期(yyyy-mm-dd)验证,您可以使用此RegEx。pattern.test(input)如果日期具有您想要的相同格式,则返回True。 Demo

var input = '1997-01-01';

var pattern =/^([0-9]{4})\-([0-9]{2})\-([0-9]{2})$/;

alert(pattern.test(input));

然后,您可以像这样验证。 Demo

var invalidDate = '2011-30-02';
var comp = invalidDate.split('-');
var m = parseInt(comp[1], 10);
var d = parseInt(comp[2], 10);
var y = parseInt(comp[0], 10);
var date = new Date(y,m-1,d);
if (date.getFullYear() == y && date.getMonth() + 1 == m && date.getDate() == d) {
    alert('Valid date');
} else {
    alert('Invalid date');
}

我希望它有所帮助