You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by rl...@apache.org on 2003/05/18 23:36:35 UTC

cvs commit: jakarta-commons/validator/src/javascript/org/apache/commons/validator/javascript validateDate.js

rleland     2003/05/18 14:36:35

  Added:       validator/src/javascript/org/apache/commons/validator/javascript
                        validateDate.js
  Log:
  Add Javascript validations for Date
  
  Revision  Changes    Path
  1.1                  jakarta-commons/validator/src/javascript/org/apache/commons/validator/javascript/validateDate.js
  
  Index: validateDate.js
  ===================================================================
  
      function validateDate(form) {
         var bValid = true;
         var focusField = null;
         var i = 0;
         var fields = new Array();
         oDate = new DateValidations();
         for (x in oDate) {
             var value = form[oDate[x][0]].value;
             var datePattern = oDate[x][2]("datePatternStrict");
             if ((form[oDate[x][0]].type == 'text' || form[oDate[x][0]].type == 'textarea') &&
                 (value.length > 0) && (datePattern.length > 0)) {
               var MONTH = "MM";
               var DAY = "dd";
               var YEAR = "yyyy";
               var orderMonth = datePattern.indexOf(MONTH);
               var orderDay = datePattern.indexOf(DAY);
               var orderYear = datePattern.indexOf(YEAR);
               if ((orderDay < orderYear && orderDay > orderMonth)) {
                   var iDelim1 = orderMonth + MONTH.length;
                   var iDelim2 = orderDay + DAY.length;
                   var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
                   var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
                   if (iDelim1 == orderDay && iDelim2 == orderYear) {
                      dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
                   } else if (iDelim1 == orderDay) {
                      dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
                   } else if (iDelim2 == orderYear) {
                      dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
                   } else {
                      dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
                   }
                   var matched = dateRegexp.exec(value);
                   if(matched != null) {
                      if (!isValidDate(matched[2], matched[1], matched[3])) {
                         if (i == 0) {
                             focusField = form[oDate[x][0]];
                         }
                         fields[i++] = oDate[x][1];
                         bValid =  false;
                      }
                   } else {
                      if (i == 0) {
                          focusField = form[oDate[x][0]];
                      }
                      fields[i++] = oDate[x][1];
                      bValid =  false;
                   }
               } else if ((orderMonth < orderYear && orderMonth > orderDay)) {
                   var iDelim1 = orderDay + DAY.length;
                   var iDelim2 = orderMonth + MONTH.length;
                   var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
                   var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
                   if (iDelim1 == orderMonth && iDelim2 == orderYear) {
                       dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
                   } else if (iDelim1 == orderMonth) {
                       dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
                   } else if (iDelim2 == orderYear) {
                       dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
                   } else {
                       dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
                   }
                   var matched = dateRegexp.exec(value);
                   if(matched != null) {
                       if (!isValidDate(matched[1], matched[2], matched[3])) {
                           if (i == 0) {
                       focusField = form[oDate[x][0]];
                           }
                           fields[i++] = oDate[x][1];
                           bValid =  false;
                        }
                   } else {
                       if (i == 0) {
                           focusField = form[oDate[x][0]];
                       }
                       fields[i++] = oDate[x][1];
                       bValid =  false;
                   }
               } else if ((orderMonth > orderYear && orderMonth < orderDay)) {
                   var iDelim1 = orderYear + YEAR.length;
                   var iDelim2 = orderMonth + MONTH.length;
                   var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
                   var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
                   if (iDelim1 == orderMonth && iDelim2 == orderDay) {
                       dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$");
                   } else if (iDelim1 == orderMonth) {
                       dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$");
                   } else if (iDelim2 == orderDay) {
                       dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$");
                   } else {
                       dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$");
                   }
                   var matched = dateRegexp.exec(value);
                   if(matched != null) {
                       if (!isValidDate(matched[3], matched[2], matched[1])) {
                           if (i == 0) {
                               focusField = form[oDate[x][0]];
                           }
                           fields[i++] = oDate[x][1];
                           bValid =  false;
                       }
                   } else {
                        if (i == 0) {
                            focusField = form[oDate[x][0]];
                        }
                        fields[i++] = oDate[x][1];
                        bValid =  false;
                   }
               } else {
                   if (i == 0) {
                       focusField = form[oDate[x][0]];
                   }
                   fields[i++] = oDate[x][1];
                   bValid =  false;
               }
            }
         }
         if (fields.length > 0) {
            focusField.focus();
            alert(fields.join('\n'));
         }
         return bValid;
      }
  
      function isValidDate(day, month, year) {
  	    if (month < 1 || month > 12) {
              return false;
          }
          if (day < 1 || day > 31) {
              return false;
          }
          if ((month == 4 || month == 6 || month == 9 || month == 11) &&
              (day == 31)) {
              return false;
          }
          if (month == 2) {
              var leap = (year % 4 == 0 &&
                 (year % 100 != 0 || year % 400 == 0));
              if (day>29 || (day == 29 && !leap)) {
                  return false;
              }
          }
          return true;
      }
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org