public static void Main()
string[] cronExpressions = {
foreach (var cron in cronExpressions)
Console.WriteLine($"Cron: {cron} -> {ValidateCron(cron)}");
static string ValidateCron(string cron)
int fieldCount = cron.Split(' ').Length;
return ValidateUnixCron(cron) ? "✅ Valid Unix Cron" : "❌ Invalid Unix Cron";
else if (fieldCount == 6 || fieldCount == 7)
return ValidateQuartzCron(cron) ? "✅ Valid Quartz Cron" : "❌ Invalid Quartz Cron";
return "❌ Invalid Cron Expression";
static bool ValidateUnixCron(string cron)
_ = CrontabSchedule.Parse(cron);
static bool ValidateQuartzCron(string cron)
if (!CronExpression.IsValidExpression(cron))
string[] fields = cron.Split(' ');
for (int i = 0; i < validRanges.Length && i < fields.Length; i++)
if (!IsValidCronField(fields[i], validRanges[i]))
static bool IsValidCronField(string field, int[] range)
Console.WriteLine(field);
if (field == "?" || field == "*" || field.Contains("-"))
if (field.All(char.IsDigit))
if (int.TryParse(field, out int num))
return num >= range[0] && num <= range[1];