时间表达式验证

来源:互联网 发布:爱色丽校色软件 编辑:程序博客网 时间:2024/06/10 16:37

java:

org.quartz.CronExpression.isValidExpression(cron)

jQuery:

/**      * Validates a cron expression.      *      * @param cronExpression The expression to validate      * @return True is expression is valid      */      function cronValidate(cronExpression ){          //alert("校验函数的开始!");          var cronParams = cronExpression.split(" ");          if (cronParams.length < 6 || cronParams.length > 7) {              return false;          }          //CronTrigger cronTrigger = new CronTrigger();          //cronTrigger.setCronExpression( cronExpression );          if (cronParams[3] == "?" || cronParams[5]=="?") {              //Check seconds param              if (!checkSecondsField(cronParams[0])) {                  return false;              }              //Check minutes param              if (!checkMinutesField(cronParams[1])) {                  return false;              }              //Check hours param              if (!checkHoursField(cronParams[2])) {                  return false;              }              //Check day-of-month param              if (!checkDayOfMonthField(cronParams[3])) {                  return false;              }              //Check months param              if (!checkMonthsField(cronParams[4])) {                  return false;              }              //Check day-of-week param              if (!checkDayOfWeekField(cronParams[5])) {                  return false;              }              //Check year param              if (cronParams.length == 7) {                  if (!checkYearField(cronParams[6])) {                      return false;                  }              }              return true;          } else {              return false;          }      }      function checkSecondsField(secondsField) {          return checkField(secondsField, 0, 59);      }      function checkField(secondsField, minimal, maximal) {          if (secondsField.indexOf("-") > -1 ) {              var startValue = secondsField.substring(0, secondsField.indexOf( "-" ));              var endValue = secondsField.substring(secondsField.indexOf( "-" ) + 1);              if (!(checkIntValue(startValue, minimal, maximal, true) && checkIntValue(endValue, minimal, maximal, true))) {                  return false;              }              try {                  var startVal = parseInt(startValue, 10);                  var endVal = parseInt(endValue, 10);                  return endVal > startVal;              } catch (e) {                  return false;              }          } else if (secondsField.indexOf(",") > -1) {              return checkListField(secondsField, minimal, maximal);          } else if (secondsField.indexOf( "/" ) > -1) {              return checkIncrementField( secondsField, minimal, maximal );          } else if (secondsField.indexOf( "*" ) != -1) {              return true;          } else {              return checkIntValue(secondsField, minimal, maximal);          }      }      function checkIntValue(value, minimal, maximal, checkExtremity) {          try {              var val = parseInt(value, 10);              //判断是否为整数              if (value == val) {                  if (checkExtremity) {                      if (val < minimal || val > maximal) {                          return false;                      }                  }                  return true;              }              return false;          } catch (e) {              return false;          }      }      function checkMinutesField(minutesField) {          return checkField(minutesField, 0, 59);      }      function checkHoursField(hoursField) {          return checkField(hoursField, 0, 23);      }      function checkDayOfMonthField(dayOfMonthField) {          if (dayOfMonthField == "?") {              return true;          }          if (dayOfMonthField.indexOf("L") >= 0) {              return checkFieldWithLetter(dayOfMonthField, "L", 1, 7, -1, -1);          } else if ( dayOfMonthField.indexOf("W") >= 0) {              return checkFieldWithLetter(dayOfMonthField, "W", 1, 31, -1, -1);          } else if (dayOfMonthField.indexOf("C") >= 0) {              return checkFieldWithLetter(dayOfMonthField, "C", 1, 31, -1, -1);          } else {              return checkField( dayOfMonthField, 1, 31 );          }      }      function checkMonthsField(monthsField) {  /*        monthsField = StringUtils.replace( monthsField, "JAN", "1" );         monthsField = StringUtils.replace( monthsField, "FEB", "2" );         monthsField = StringUtils.replace( monthsField, "MAR", "3" );         monthsField = StringUtils.replace( monthsField, "APR", "4" );         monthsField = StringUtils.replace( monthsField, "MAY", "5" );         monthsField = StringUtils.replace( monthsField, "JUN", "6" );         monthsField = StringUtils.replace( monthsField, "JUL", "7" );         monthsField = StringUtils.replace( monthsField, "AUG", "8" );         monthsField = StringUtils.replace( monthsField, "SEP", "9" );         monthsField = StringUtils.replace( monthsField, "OCT", "10" );         monthsField = StringUtils.replace( monthsField, "NOV", "11" );         monthsField = StringUtils.replace( monthsField, "DEC", "12" );*/          monthsField.replace("JAN", "1");          monthsField.replace("FEB", "2");          monthsField.replace("MAR", "3");          monthsField.replace("APR", "4");          monthsField.replace("MAY", "5");          monthsField.replace("JUN", "6");          monthsField.replace("JUL", "7");          monthsField.replace("AUG", "8");          monthsField.replace("SEP", "9");          monthsField.replace("OCT", "10");          monthsField.replace("NOV", "11");          monthsField.replace("DEC", "12");          return checkField(monthsField, 1, 31);      }      function checkDayOfWeekField(dayOfWeekField) {  /*        dayOfWeekField = StringUtils.replace( dayOfWeekField, "SUN", "1" );         dayOfWeekField = StringUtils.replace( dayOfWeekField, "MON", "2" );         dayOfWeekField = StringUtils.replace( dayOfWeekField, "TUE", "3" );         dayOfWeekField = StringUtils.replace( dayOfWeekField, "WED", "4" );         dayOfWeekField = StringUtils.replace( dayOfWeekField, "THU", "5" );         dayOfWeekField = StringUtils.replace( dayOfWeekField, "FRI", "6" );         dayOfWeekField = StringUtils.replace( dayOfWeekField, "SAT", "7" );*/          dayOfWeekField.replace("SUN", "1" );          dayOfWeekField.replace("MON", "2" );          dayOfWeekField.replace("TUE", "3" );          dayOfWeekField.replace("WED", "4" );          dayOfWeekField.replace("THU", "5" );          dayOfWeekField.replace("FRI", "6" );          dayOfWeekField.replace("SAT", "7" );                  if (dayOfWeekField == "?") {              return true;          }          if (dayOfWeekField.indexOf("L") >= 0) {              return checkFieldWithLetter(dayOfWeekField, "L", 1, 7, -1, -1);          } else if (dayOfWeekField.indexOf("C") >= 0) {              return checkFieldWithLetter(dayOfWeekField, "C", 1, 7, -1, -1);          } else if (dayOfWeekField.indexOf("#") >= 0) {              return checkFieldWithLetter(dayOfWeekField, "#", 1, 7, 1, 5);          } else {              return checkField(dayOfWeekField, 1, 7);          }      }      function checkYearField(yearField) {          return checkField(yearField, 1970, 2099);      }      function checkFieldWithLetter(value, letter, minimalBefore, maximalBefore,                                            minimalAfter, maximalAfter) {          var canBeAlone = false;          var canHaveIntBefore = false;          var canHaveIntAfter = false;          var mustHaveIntBefore = false;          var mustHaveIntAfter = false;          if (letter == "L") {              canBeAlone = true;              canHaveIntBefore = true;              canHaveIntAfter = false;              mustHaveIntBefore = false;              mustHaveIntAfter = false;          }          if (letter == "W" || letter == "C") {              canBeAlone = false;              canHaveIntBefore = true;              canHaveIntAfter = false;              mustHaveIntBefore = true;              mustHaveIntAfter = false;          }          if (letter == "#") {              canBeAlone = false;              canHaveIntBefore = true;              canHaveIntAfter = true;              mustHaveIntBefore = true;              mustHaveIntAfter = true;          }          var beforeLetter = "";          var afterLetter = "";          if (value.indexOf(letter) >= 0 ) {              beforeLetter = value.substring( 0, value.indexOf(letter));          }          if (!value.endsWith(letter)) {              afterLetter = value.substring( value.indexOf( letter ) + 1 );          }          if (value.indexOf(letter) >= 0) {              if (letter == value) {                  return canBeAlone;              }              if (canHaveIntBefore) {                  if (mustHaveIntBefore && beforeLetter.length == 0) {                      return false;                  }                  if (!checkIntValue(beforeLetter, minimalBefore, maximalBefore, true)){                      return false;                  }              } else {                  if (beforeLetter.length > 0 ) {                      return false;                  }              }              if (canHaveIntAfter) {                  if ( mustHaveIntAfter && afterLetter.length == 0 ) {                      return false;                  }                  if (!checkIntValue(afterLetter, minimalAfter, maximalAfter, true)) {                      return false;                  }              } else {                  if (afterLetter.length > 0) {                      return false;                  }              }          }          return true;      }  /*    function checkIntValue(value, minimal, maximal) {         return checkIntValue(value, minimal, maximal, true);     } */      function checkIncrementField(value, minimal, maximal) {          var start = value.substring(0, value.indexOf("/"));          var increment = value.substring(value.indexOf("/") + 1);          if (!("*" == start)) {              return checkIntValue(start, minimal, maximal, true) && checkIntValue(increment, minimal, maximal, false);          } else {              return checkIntValue(increment, minimal, maximal, true);          }      }      function checkListField(value, minimal, maximal ) {          var st = value.split(",");          var values = new Array(st.length);          for(var j = 0; j < st.length; j++) {              values[j] = st[j];          }          var previousValue = -1;          for (var i= 0; i < values.length; i++) {              var currentValue = values[i];              if (!checkIntValue(currentValue, minimal, maximal, true)) {                  return false;              }              try {                  var val = parseInt(currentValue, 10);                  if (val <= previousValue) {                      return false;                  } else {                      previousValue = val;                  }              } catch (e) {                  // we have always an int              }          }          return true;      }  
原创粉丝点击