我希望在我的程序中有用户定义的cron表达式。是否有用于cron表达式的验证器,以便用户无法插入无效的cron代码?
N.B. --我认为Quartz.Net上的cron表达式的格式与在Quartz.Net中使用的略有不同。我想要石英版的。
发布于 2014-10-09 20:27:28
UNIX表达式和Quartz表达式是不同的。简单地说,
您可以使用这来判断Cron表达式是否正确。
编辑:查看CronExpression.ValidateExpression方法。
发布于 2016-02-03 17:55:20
这个问题已经过时了,但现在有更多的选择。
我发现这个新的nuget包NCrontab.Advanced很有用,它很好地替代了旧的NCrontab,增加了更多的特性,并且应该有更广泛的应用程序。
发布于 2017-05-18 07:10:16
可以使用CronExpression.IsValidateExpression()方法和使用regex进行额外的regex验证。
示例
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);
}https://stackoverflow.com/questions/26285503
复制相似问题