正则校验crontab格式

紧接着前一篇博客,定时任务篇,其中crontab语法没有做任何格式校验,这是不完善的,所以就有这一篇文章。
文章内容都是转载翻译的, 较多篇幅删减,保留了最基本的使用校验正则,原文地址在最后参考链接。

crontab表达式语法可以参考维基百科

比较全面的正则

(@(annually|yearly|monthly|weekly|daily|hourly|reboot))|(@every (\d+(ns|us|µs|ms|s|m|h))+)|((((\d+,)+\d+|(\d+(\/|-)\d+)|\d+|\*) ?){5,7})

以JavaScript 正则为例子

// 正确的语法 */5 4 * * 1-6
/(@(annually|yearly|monthly|weekly|daily|hourly|reboot))|(@every (\d+(ns|us|µs|ms|s|m|h))+)|((((\d+,)+\d+|(\d+(\/|-)\d+)|\d+|\*) ?){5,7})/.test('*/5 4 * * 1-6')  // true

// 错误的语法 - 4 * * *

/(@(annually|yearly|monthly|weekly|daily|hourly|reboot))|(@every (\d+(ns|us|µs|ms|s|m|h))+)|((((\d+,)+\d+|(\d+(\/|-)\d+)|\d+|\*) ?){5,7})/.test('- 4 * * *')  // false

更简洁的例子

如果只需要验证纯数字的写法,不使用英文单词之类的可以使用以下正则

如验证单个单位是否正确

首先熟悉下单个单位语法

两个或者多个数字,使用 , 分隔
两个数字使用 / 或者 -
1-2 整数
单个符号 *

匹配单个单位的正则语法 参考 https://regexr.com/4jp7i

/(\d+,)+\d+|(\d+(\/|-)\d+)|\d+|\*/

完善整个匹配crontab 数字语法 参考 https://regexr.com/4jp7o

/(((\d+,)+\d+|(\d+(\/|-)\d+)|\d+|\*) ?){5,7}/

总结

一般使用crontab语句,基本只使用数字语法,所以大部分情况下只需要使用最后一种即可。

/(((\d+,)+\d+|(\d+(\/|-)\d+)|\d+|\*) ?){5,7}/

参考链接

posted @ 2020-12-26 11:11  王小右  阅读(3580)  评论(0编辑  收藏  举报