Как проверить cron-выражение с заданным лимитом? - PullRequest
2 голосов
/ 13 июля 2020

Мне нужно построить cron-валидатор. Это выражение cron, оно означает каждые 30 секунд.

*/30 * * * * *

Задача - показать ошибку, если время меньше 30 секунд. Пример: Итак, если я напишу следующее, что означает каждые 10 секунд,

*/10 * * * * *

Должна появиться ошибка: «Пожалуйста, введите более 30 секунд». Вот пример функции, выражение - это выражение cron, ограничение в миллисекундах, поэтому, если я пропущу 30 секунд, он должен подтвердить 30 секунд.

function cronValidator(expression = '', limit = 30000){}

До сих пор я пробовал это :

function cronValidator(expression = '', limit = 30000) {
  // filter the number of seconds from expression
  const [seconds] = expression.match(/(\d+)/);
  // convert seconds into miliseconds
  const milisecondsInExpression = seconds * 1000;

  if (milisecondsInExpression < limit) {
    console.error(`Please enter more than ${limit / 1000} seconds.`);
  } else {
    console.log('You are good to go.');
  }
}

const cronExp = '*/31 * * * * *';

cronValidator(cronExp, 40000);

но это не работает, причина:

  • Предел или выражение могут быть минутами или часами. Не только секунды. Это означает, что обычного регулярного выражения недостаточно.

1 Ответ

0 голосов
/ 13 июля 2020

Разделите ввод на поля, разделенные пробелами, и просто проверьте первое поле. И вам следует проверять частоту только в том случае, если она имеет вид */#.

let fields = expression.split(/\s+/);
let seconds = fields[0];
let split_seconds = seconds.match(/^\*\/(\d+)$);
if (split_seconds) {
    let milliseconds = split_seconds[1] * 1000;
    if (milliseconds < limit) {
        console.error(`Please enter more than ${limit / 1000} seconds.`);
    }
}
...