You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

pattern-validation.js 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. 'use strict';
  2. const convertExpression = require('./convert-expression');
  3. module.exports = ( () => {
  4. function isValidExpression(expression, min, max){
  5. const options = expression.split(',');
  6. const regexValidation = /^\d+$|^\*$|^\*\/\d+$/;
  7. for(let i = 0; i < options.length; i++){
  8. const option = options[i];
  9. const optionAsInt = parseInt(options[i], 10);
  10. if(optionAsInt < min || optionAsInt > max || !regexValidation.test(option)) {
  11. return false;
  12. }
  13. }
  14. return true;
  15. }
  16. function isInvalidSecond(expression){
  17. return !isValidExpression(expression, 0, 59);
  18. }
  19. function isInvalidMinute(expression){
  20. return !isValidExpression(expression, 0, 59);
  21. }
  22. function isInvalidHour(expression){
  23. return !isValidExpression(expression, 0, 23);
  24. }
  25. function isInvalidDayOfMonth(expression){
  26. return !isValidExpression(expression, 1, 31);
  27. }
  28. function isInvalidMonth(expression){
  29. return !isValidExpression(expression, 1, 12);
  30. }
  31. function isInvalidWeekDay(expression){
  32. return !isValidExpression(expression, 0, 7);
  33. }
  34. function validateFields(patterns, executablePatterns){
  35. if (isInvalidSecond(executablePatterns[0])) {
  36. throw patterns[0] + ' is a invalid expression for second';
  37. }
  38. if (isInvalidMinute(executablePatterns[1])) {
  39. throw patterns[1] + ' is a invalid expression for minute';
  40. }
  41. if (isInvalidHour(executablePatterns[2])) {
  42. throw patterns[2] + ' is a invalid expression for hour';
  43. }
  44. if (isInvalidDayOfMonth(executablePatterns[3])) {
  45. throw patterns[3] + ' is a invalid expression for day of month';
  46. }
  47. if (isInvalidMonth(executablePatterns[4])) {
  48. throw patterns[4] + ' is a invalid expression for month';
  49. }
  50. if (isInvalidWeekDay(executablePatterns[5])) {
  51. throw patterns[5] + ' is a invalid expression for week day';
  52. }
  53. }
  54. function validate(pattern){
  55. if (typeof pattern !== 'string'){
  56. throw 'pattern must be a string!';
  57. }
  58. let patterns = pattern.split(' ');
  59. const executablePattern = convertExpression(pattern);
  60. const executablePatterns = executablePattern.split(' ');
  61. if(patterns.length === 5){
  62. patterns = ['0'].concat(patterns);
  63. }
  64. validateFields(patterns, executablePatterns);
  65. }
  66. return validate;
  67. })();