52 lines
1.3 KiB
Java
52 lines
1.3 KiB
Java
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
|
||
}
|