Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用giiven limit验证cron表达式?_Javascript_Node.js_Cron_Cron Task - Fatal编程技术网

Javascript 如何使用giiven limit验证cron表达式?

Javascript 如何使用giiven limit验证cron表达式?,javascript,node.js,cron,cron-task,Javascript,Node.js,Cron,Cron Task,我需要构建一个cron验证器。 这是一个cron表达式,它表示每30秒一次 */30***** 如果时间少于30秒,任务是显示错误。 例子: 如果我写下以下内容,也就是说,每10秒 */10***** 它应该显示一个错误,说“请输入30秒以上”。 这是一个示例函数,表达式是cron表达式,限制以毫秒为单位,所以如果我超过30秒,它应该验证30秒 函数cronValidator(表达式='',限制=30000){} 到目前为止,我已经尝试过: function cronValidator(expr

我需要构建一个cron验证器。 这是一个cron表达式,它表示每30秒一次

*/30*****

如果时间少于30秒,任务是显示错误。 例子: 如果我写下以下内容,也就是说,每10秒

*/10*****

它应该显示一个错误,说“请输入30秒以上”。 这是一个示例函数,表达式是cron表达式,限制以毫秒为单位,所以如果我超过30秒,它应该验证30秒

函数cronValidator(表达式='',限制=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);
函数cronValidator(表达式='',限制=30000){
//从表达式中筛选秒数
常量[秒]=表达式.match(/(\d+/);
//将秒转换为毫秒
常量毫秒秒表达式=秒*1000;
if(毫秒表示<极限){
错误(`请输入超过${limit/1000}秒。`);
}否则{
console.log('你可以走了');
}
}
常量cronExp='*/31*****';
cronValidator(cronExp,40000);
但它不起作用,因为:

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

将输入拆分为空格分隔的字段,然后只验证第一个字段。如果频率的格式为
*/#
,则只应检查频率

let fields=expression.split(/\s+/);
设秒=字段[0];
让split_seconds=seconds.match(/^\*\/(\d+$);
如果(分割_秒){
设毫秒=split_seconds[1]*1000;
如果(毫秒<限制){
错误(`请输入超过${limit/1000}秒。`);
}
}

这不是每30秒一次,而是每30分钟一次。Crontab只有分钟粒度,而不是秒粒度。只有5个时间字段:分钟、小时、天、月、工作日。请验证您的cron表达式是否有效。您可以在这里查看,但限制也可以是小时、天、分钟。。不仅仅是毫秒。我以为你只是想限制秒数。如果他们把时间分开,那就超过30秒,所以不需要限制。
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.`);
    }
}