123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- import CronParser from 'cron-parser'
- import { replaceWeekName } from './tabs/const'
- export default (rule, value, callback) => {
- // 没填写就不校验
- if (!value) {
- callback()
- return true
- }
- const values = value.split(' ').filter(item => !!item)
- if (values.length > 7) {
- callback(new Error('Cron表达式最多7项!'))
- return false
- }
- // 检查第7项
- let e = value
- if (values.length === 7) {
- const year = replaceWeekName(values[6])
- if (year !== '*' && year !== '?') {
- let yearValues = []
- if (year.indexOf('-') >= 0) {
- yearValues = year.split('-')
- } else if (year.indexOf('/')) {
- yearValues = year.split('/')
- } else {
- yearValues = [year]
- }
- // console.info(yearValues)
- // 判断是否都是数字
- const checkYear = yearValues.some(item => isNaN(item))
- if (checkYear) {
- callback(new Error('Cron表达式参数[年]错误:' + year))
- return false
- }
- }
- // 取其中的前六项
- e = values.slice(0, 6).join(' ')
- }
- // 6位 没有年
- // 5位没有秒、年
- let result = true
- try {
- const iter = CronParser.parseExpression(e)
- iter.next()
- callback()
- } catch (e) {
- callback(new Error('Cron表达式错误:' + e))
- result = false
- }
- return result
- }
|