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