【问题标题】:Cron expression validatorCron 表达式验证器
【发布时间】:2014-12-04 19:14:33
【问题描述】:

我想在我的程序中使用用户定义的 cron 表达式。是否有 cron 表达式的验证器,以便用户无法插入无效的 cron 代码?

注意我认为 Quartz.Net 上的 cron 表达式与 UNIX 中使用的格式略有不同。我想要它的 Quartz 版本。

【问题讨论】:

    标签: c# cron quartz-scheduler quartz.net schedule


    【解决方案1】:

    UNIX Cron 表达式和 Quartz 是不同的。简单来说,

    • 在 Unix 中
      • (分、时、日、月、day_of_week、年)
    • 石英
      • (秒、分、小时、日、月、day_of_week、年)

    您可以使用this 来了解 Cron 表达式是否正确。

    编辑:查看CronExpression.ValidateExpression 方法。

    【讨论】:

    • 我可以用你链接的 API 页面上的哪个函数来判断我的 cron 是否正确?
    【解决方案2】:

    问题已过时,但现在有更多选择。

    我发现这个新的 nuget 包 NCrontab.Advanced 很有用,它可以很好地替代旧的 NCrontab 添加更多功能,并且应该有更广泛的应用。

    【讨论】:

      【解决方案3】:

      可以将 CronExpression.IsValidateExpression() 方法与使用正则表达式的附加正则表达式验证一起使用。

      例子

      public static bool IsValidSchedule(string schedule) {
      
              var valid = CronExpression.IsValidExpression(schedule);
              // Some expressions are parsed as valid by the above method but they are not valid, like "* * * ? * *&54".
              //In order to avoid such invalid expressions an additional check is required, that is done using the below regex.
      
              var regex = @"^\s*($|#|\w+\s*=|(\?|\*|(?:[0-5]?\d)(?:(?:-|\/|\,)(?:[0-5]?\d))?(?:,(?:[0-5]?\d)(?:(?:-|\/|\,)(?:[0-5]?\d))?)*)\s+(\?|\*|(?:[0-5]?\d)(?:(?:-|\/|\,)(?:[0-5]?\d))?(?:,(?:[0-5]?\d)(?:(?:-|\/|\,)(?:[0-5]?\d))?)*)\s+(\?|\*|(?:[01]?\d|2[0-3])(?:(?:-|\/|\,)(?:[01]?\d|2[0-3]))?(?:,(?:[01]?\d|2[0-3])(?:(?:-|\/|\,)(?:[01]?\d|2[0-3]))?)*)\s+(\?|\*|(?:0?[1-9]|[12]\d|3[01])(?:(?:-|\/|\,)(?:0?[1-9]|[12]\d|3[01]))?(?:,(?:0?[1-9]|[12]\d|3[01])(?:(?:-|\/|\,)(?:0?[1-9]|[12]\d|3[01]))?)*)\s+(\?|\*|(?:[1-9]|1[012])(?:(?:-|\/|\,)(?:[1-9]|1[012]))?(?:L|W)?(?:,(?:[1-9]|1[012])(?:(?:-|\/|\,)(?:[1-9]|1[012]))?(?:L|W)?)*|\?|\*|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(?:(?:-)(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?(?:,(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(?:(?:-)(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?)*)\s+(\?|\*|(?:[0-6])(?:(?:-|\/|\,|#)(?:[0-6]))?(?:L)?(?:,(?:[0-6])(?:(?:-|\/|\,|#)(?:[0-6]))?(?:L)?)*|\?|\*|(?:MON|TUE|WED|THU|FRI|SAT|SUN)(?:(?:-)(?:MON|TUE|WED|THU|FRI|SAT|SUN))?(?:,(?:MON|TUE|WED|THU|FRI|SAT|SUN)(?:(?:-)(?:MON|TUE|WED|THU|FRI|SAT|SUN))?)*)(|\s)+(\?|\*|(?:|\d{4})(?:(?:-|\/|\,)(?:|\d{4}))?(?:,(?:|\d{4})(?:(?:-|\/|\,)(?:|\d{4}))?)*))$";
      
              return valid&& Regex.IsMatch(schedule, regex);
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 2011-08-08
        • 2020-11-02
        • 2022-01-22
        相关资源
        最近更新 更多