首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cron表达式验证器

Cron表达式验证器
EN

Stack Overflow用户
提问于 2014-10-09 18:26:13
回答 3查看 12.6K关注 0票数 8

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

N.B. --我认为Quartz.Net上的cron表达式的格式与在Quartz.Net中使用的略有不同。我想要石英版的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-09 20:27:28

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

  • 在Unix 中
    • (分钟、小时、日、月、day_of_week、年份)

  • 石英
    • (第二、分钟、小时、日、月、day_of_week、年份)

您可以使用来判断Cron表达式是否正确。

编辑:查看CronExpression.ValidateExpression方法。

票数 5
EN

Stack Overflow用户

发布于 2016-02-03 17:55:20

这个问题已经过时了,但现在有更多的选择。

我发现这个新的nuget包NCrontab.Advanced很有用,它很好地替代了旧的NCrontab,增加了更多的特性,并且应该有更广泛的应用程序。

票数 2
EN

Stack Overflow用户

发布于 2017-05-18 07:10:16

可以使用CronExpression.IsValidateExpression()方法和使用regex进行额外的regex验证。

示例

代码语言:javascript
复制
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);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26285503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档