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
|
}
|