2014-10-09 2 views
3

Я хотел бы иметь пользовательские выражения cron в моей программе. Существуют ли валидаторы для выражений cron, чтобы пользователь не мог вставить недопустимый код cron?Валидатор выражения Cron

N.B. Я думаю, что выражение cron на Quartz.Net имеет небольшой формат, чем тот, который используется в UNIX. Я хотел бы получить версию кварца.

ответ

3

UNIX Cron-выражения и кварцевые - это разные. Просто

  • В Unix
    • (минута, час, день, месяц, DAY_OF_WEEK, год)
  • В Quartz
    • (секунду, минуту, час, день, месяц, DAY_OF_WEEK, год)

Вы можете использовать this, чтобы узнать, правильное ли выражение Cron.

EDIT: Посмотрите на CronExpression.ValidateExpression метод.

+2

которые функционируют на странице API вы связаны я могу использовать, чтобы сказать, если мои хроны правильно? – Disasterkid

0

Вопрос поставлен, но теперь есть больше вариантов.

Я нашел полезным этот новый пакет nuget NCrontab.Advanced, который является хорошей заменой для старых NCrontab, добавляя дополнительные функции и должен иметь более широкий спектр приложений.

0

Может использовать метод CronExpression.IsValidateExpression() с дополнительной проверкой регулярных выражений с использованием 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); 
    } 
Смежные вопросы