Why cronpreview rejects some valid-looking expressions
You typed something that looks fine and got a red error. Here is what the validator is checking and why.
A cron expression that parses on one platform can be rejected outright on another, even when it looks identical to the eye. cronpreview's validator runs dialect-specific rules before handing the expression off to the iterator. That's deliberate: we'd rather you find out at edit time than at deploy time.
AWS EventBridge: missing ?
0 9 * * MON-FRI * looks valid. It is not. AWS requires that one of day-of-month or day-of-week be ?. Rewrite as 0 9 ? * MON-FRI * and the validator clears it.
GitHub Actions: */2 in the minute field
GitHub silently caps the minimum interval at 5 minutes. */2 * * * * is accepted by the YAML parser but the scheduler simply ignores it at runtime — the job will appear to be configured and fire approximately never. The validator rejects it so you don't spend an afternoon wondering why nothing is happening.
Vercel: alphabetic aliases
Most cron implementations accept MON-FRI or JAN. Vercel does not. 0 9 * * MON-FRI would deploy but never fire correctly. Use 0 9 * * 1-5.
Vercel Hobby: more than one run per day
The Hobby plan limits cron schedules to one fire per day. 0 9 * * 1-5 fires five times per week — over the limit, rejected at deploy. Use a single day (0 9 * * 1) or upgrade to Pro. Toggle the "Vercel Hobby plan" checkbox in the dialect picker to surface this at edit time.
Quartz: both day-of-month and day-of-week without ?
Quartz treats "day-of-month 15 and day-of-week MON" as ambiguous and rejects it. The validator emits a warning rather than an error, because most Quartz implementations do parse it (treating both as wildcards or intersecting); but it's usually a sign of a bug in your expression, so we flag it.