Cron Expression Validator
Valideer cron-expressies en bekijk een gedetailleerde veld-voor-veld analyse
Cron-expressie
minute hour day(month) month day(week)
Veldanalyse
*/15(0–59)Breidt uit naar: 0, 15, 30, 45
0-6(0–23)Breidt uit naar: 0, 1, 2, 3, 4, 5, 6
1,15(1–31)Breidt uit naar: 1, 15
*(1–12)Breidt uit naar: all (1–12)
1-5(0–6)Breidt uit naar: 1, 2, 3, 4, 5
Wat is cron-expressievalidatie?
Cron-expressievalidatie is het proces waarbij gecontroleerd wordt of een cron-string de juiste syntaxisregels volgt voordat deze een planner bereikt. Een cron-expressie gebruikt vijf door spaties gescheiden velden (minuut, uur, dag van de maand, maand, dag van de week) om een terugkerend schema te definiëren. Als een veld een waarde buiten het toegestane bereik bevat, een ongeldige operator, of een structuurfout zoals een verkeerd aantal velden, wordt de expressie door de planner afgewezen bij het uitrollen of stelt het schema stilzwijgend geen enkele triggertijd in.
Een cron-expressie online valideren vangt fouten eerder op dan uitrollen naar productie en wachten op een gemiste taak. Veelvoorkomende fouten zijn: 25 invoeren in het uurveld (geldig bereik: 0-23), een stapwaarde van nul gebruiken (*/0, wat ongedefinieerd is), bereikgrenzen omdraaien (5-1 in plaats van 1-5), of extra velden toevoegen die horen bij niet-standaard formaten zoals Quartz. Een syntaxischecker signaleert deze problemen direct en vertelt u precies welk veld fout is.
Cron-validatie verschilt van cron-parsing. Een parser neemt een geldige expressie en vertaalt deze naar een leesbaar schema. Een validator beantwoordt een eenvoudigere vraag: is deze expressie correct opgebouwd? Valideer altijd vóór het parsen — het heeft geen zin een ongeldige expressie aan een planner te voeren. In CI/CD-pipelines voorkomt geautomatiseerde cron-validatie dat kapotte schema's worden samengevoegd in configuratiebestanden.
Waarom deze cron-validator gebruiken?
Een cron-expressie heeft strikte syntaxisregels, en planners geven inconsistente foutmeldingen wanneer die regels worden overtreden. Sommige planners wijzen de expressie af met een cryptische fout; anderen accepteren hem stilzwijgend en activeren nooit. Deze validator geeft u een duidelijke, veld-voor-veld diagnose voordat u uitrolt.
Toepassingen van de cron-validator
Veelvoorkomende cron-syntaxisfouten
De onderstaande tabel toont de meest voorkomende cron-expressiefouten en de oorzaken. Dit zijn de fouten die steeds terugkeren in productieconfiguraties en CI/CD-pipelines.
| Fouttype | Voorbeeld | Wat ging er mis |
|---|---|---|
| Too few fields | 0 9 * * | Missing the day-of-week field. Standard cron requires exactly 5 fields. |
| Too many fields | 0 0 9 * * 1 2026 | Extra fields. Some tools add seconds or year, but standard cron uses 5. |
| Value out of range | 0 25 * * * | Hour field accepts 0-23. Value 25 exceeds the maximum. |
| Invalid step base | 0 0 32/2 * * | Day-of-month starts at 32, which exceeds the 1-31 range. |
| Step of zero | */0 * * * * | Step value must be 1 or greater. Zero creates an infinite loop. |
| Empty field | 0 9 * * 1 | Double space creates an empty field. Each field needs a value. |
| Invalid character | 0 9 * * Mon-Fry | Typo in day name. Use three-letter abbreviations: MON, TUE, WED, THU, FRI, SAT, SUN. |
| Reversed range | 0 9 * * 5-1 | Range end (1) is less than start (5). Write 1-5 or use a list: 5,6,0,1. |
Geldige vs. ongeldige cron-expressies
Een beknopt overzicht van correct opgebouwde expressies naast veelgemaakte fouten. Gebruik dit om uw expressie snel te controleren voordat u hem in een plannerconfiguratie plakt.
Codevoorbeelden
Hoe cron-expressies programmatisch te valideren in JavaScript, Python, Go en Bash. Elk voorbeeld laat zien hoe ongeldige syntaxis wordt opgevangen en een betekenisvolle foutmelding wordt gegenereerd.
import { parseExpression } from 'cron-parser';
// Validate a cron expression by attempting to parse it
function validateCron(expr) {
try {
parseExpression(expr);
return { valid: true, error: null };
} catch (err) {
return { valid: false, error: err.message };
}
}
console.log(validateCron('0 9 * * 1-5'));
// → { valid: true, error: null }
console.log(validateCron('0 25 * * *'));
// → { valid: false, error: "Constraint error, got value 25 expected range 0-23" }
// Validate with field-level detail using cron-validator
import { isValidCron } from 'cron-validator';
isValidCron('*/15 * * * *'); // → true
isValidCron('*/15 * * * *', { seconds: true }); // → false (expects 6 fields)
isValidCron('0 0 31 2 *'); // → true (syntactically valid, Feb 31 never fires)from croniter import croniter
# Validate by checking if croniter can parse the expression
def validate_cron(expr: str) -> dict:
if croniter.is_valid(expr):
return {"valid": True, "error": None}
# Get a more specific error message
try:
croniter(expr)
except (ValueError, KeyError) as e:
return {"valid": False, "error": str(e)}
return {"valid": False, "error": "Unknown error"}
print(validate_cron("0 9 * * 1-5"))
# → {'valid': True, 'error': None}
print(validate_cron("0 25 * * *"))
# → {'valid': False, 'error': '...out of range...'}
print(validate_cron("* * *"))
# → {'valid': False, 'error': 'Exactly 5 or 6 columns...'}
# Field-level validation
from crontab import CronTab
cron = CronTab(tab="")
job = cron.new(command="/bin/true")
try:
job.setall("0 9 * * 1-5")
print(job.is_valid()) # → True
except Exception as e:
print(f"Invalid: {e}")package main
import (
"fmt"
"github.com/robfig/cron/v3"
)
// ValidateCron checks whether a 5-field cron expression is syntactically correct
func ValidateCron(expr string) (bool, error) {
parser := cron.NewParser(
cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow,
)
_, err := parser.Parse(expr)
if err != nil {
return false, err
}
return true, nil
}
func main() {
exprs := []string{
"0 9 * * 1-5", // valid
"0 25 * * *", // invalid: hour 25
"*/15 * * * *", // valid
"0 0 32 * *", // invalid: day 32
}
for _, e := range exprs {
ok, err := ValidateCron(e)
if ok {
fmt.Printf("%-20s VALID
", e)
} else {
fmt.Printf("%-20s INVALID: %v
", e, err)
}
}
}#!/bin/bash
# Validate cron syntax using Python one-liner
validate_cron() {
python3 -c "
from croniter import croniter
import sys
expr = sys.argv[1]
if croniter.is_valid(expr):
print(f'VALID: {expr}')
sys.exit(0)
else:
print(f'INVALID: {expr}')
sys.exit(1)
" "$1"
}
validate_cron "0 9 * * 1-5" # → VALID: 0 9 * * 1-5
validate_cron "0 25 * * *" # → INVALID: 0 25 * * *
# Quick regex pre-check (catches field count and obvious issues)
cron_regex='^([0-9*/,-]+\s+){4}[0-9*/,-]+$'
echo "*/5 * * * *" | grep -Eq "$cron_regex" && echo "passes basic check"
echo "* * *" | grep -Eq "$cron_regex" || echo "fails basic check"