紧接着前一篇博客,定时任务篇,其中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}/