如何使用给定的限制条件验证cron表达式?

3

我需要构建一个cron-validator。

这是一个cron表达式,它表示每30秒执行一次。

任务是在时间少于30秒时显示错误。例如:

如果我写了下面的内容,表示每10秒执行一次:

*/10 * * * * *

它应该显示一个错误,提示“请输入超过30秒的时间”。下面是一个函数示例,其中expression是cron表达式,limit以毫秒为单位,所以如果传递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);

但是它不起作用,因为:

  • 限制或表达式可以是分钟或小时。不仅仅是秒。这意味着普通的正则表达式是不够的。

这不是每30秒一次,而是每30分钟一次。 - undefined
Crontab只能以分钟为单位进行调度,无法精确到秒。 - undefined
只有5个时间字段:分钟,小时,天,月,工作日。 - undefined
请验证您的cron表达式是否有效。您可以在此处进行检查:https://crontab.guru/ - undefined
1个回答

0
将输入按空格分隔为字段,并仅验证第一个字段。如果它的形式是*/#,则应仅检查频率。
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.`);
    }
}

但限制也可以是小时、天、分钟,而不仅仅是毫秒。 - undefined
我以为你只是想限制秒数。 - undefined
如果他们分割时间,超过30秒,那么就不需要限制它。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接