前端正则验证cron表达式

553 阅读1分钟

前端js使用正则验证cron表达式,如果用vue 其实可以直接用封装好的插件,但是我发现插件是有一些局限性的,有些表达式就验证不出来,比如星期6L或者是#号,前端的有些插件都验证不出来,所以只能用最笨的方式来验证,自己写正则,然后写一堆复杂且重复的代码。


// 秒/分
      const reg1 = /^([0-5]?\d)([\/\-][0-5]?\d)?$/ // 形如23 23/34 45-59
      const reg2 = /^[0-5]?\d(,[0-5]?\d)*$/ // 形如 12,43,56
      const reg3 = /^\*$/ // 匹配 *
      // 小时
      const reg4 = /^(([0-1]?\d)|(2[0-3]))([\/\-](([0-1]?\d)|(2[0-3])))?$/ // 形如23 12/18 7-19
      const reg5 = /^(([0-1]?\d)|(2[0-3]))(,(([0-1]?\d)|(2[0-3])))*$/ // 形如12,15,20
      // 日期
      const reg6 = /^(([1-9])|([12]\d)|(3[01]))([\/\-](([1-9])|([12]\d)|(3[01])))?$/ // 形如1 12/18 7-26
      const reg7 = /^(([1-9])|([12]\d)|(3[01]))(,(([1-9])|([12]\d)|(3[01])))*$/ // 形如23,25,30
      const reg8 = /^(\*|\?)$/ // 形如 *  ?
      const reg9 = /^(((([1-9])|([12]\d)|(3[01]))[WC])|(LW?))$/ // 形如12W 13C L LW
      // 月份
      const reg10 = /^(([1-9])|(1[0-2]))([\/\-](([1-9])|(1[0-2])))?$/ // 形如1 3/6 7-10
      const reg11 = /^(([1-9])|(1[0-2]))(,(([1-9])|(1[0-2])))*$/ // 形如3,5,8
      const reg12 = /^\*$/ // 形如 *
      const reg13 = /^((JAN)|(FEB)|(MAR)|(APR)|(MAY)|(JUN)|(JUL)|(AUG)|(SEPT)|(OCT)|(NOV)|(DEC))(\-((JAN)|(FEB)|(MAR)|(APR)|(MAY)|(JUN)|(JUL)|(AUG)|(SEPT)|(OCT)|(NOV)|(DEC)))?$/i // 12个月份
      const reg14 = /^((JAN)|(FEB)|(MAR)|(APR)|(MAY)|(JUN)|(JUL)|(AUG)|(SEPT)|(OCT)|(NOV)|(DEC))(,((JAN)|(FEB)|(MAR)|(APR)|(MAY)|(JUN)|(JUL)|(AUG)|(SEPT)|(OCT)|(NOV)|(DEC)))*$/i // 12个月份
      // 星期
      const reg15 = /^[1-7]([\/\-][1-7])?$/ // 形如1 3/6 2-5
      const reg16 = /^[1-7](,[1-7])*$/ // 形如3,5,6
      const reg17 = /^(\*|\?|L)$/ // 形如 * ? L
      const reg18 = /^((MON)|(TUES)|(WED)|(THUR)|(FRI)|(SAT)|(SUN))([\-]((MON)|(TUES)|(WED)|(THUR)|(FRI)|(SAT)|(SUN)))?$/i // 形如 7个星期 -连接
      const reg19 = /^((MON)|(TUES)|(WED)|(THUR)|(FRI)|(SAT)|(SUN))(,((MON)|(TUES)|(WED)|(THUR)|(FRI)|(SAT)|(SUN)))*$/i // 形如 7个星期 ,枚举
      const reg20 = /^[1-7][LC]$/ // 形如 3L 4C
      const reg21 = /^[1-7]?#[1-5]$/ // 形如 #4  6#3

//使用
const secondsVal = this.cronValue[0].value
const secondsCron = reg1.test(secondsVal)
return secondsCron