Cron Expression Validator

Validera cron-uttryck och visa detaljerad fältvis uppdelning

Prova ett exempel

Cron-uttryck

minute hour day(month) month day(week)

Giltigt cron-uttryck

Fältuppdelning

Minute*/15(0–59)

Utökas till: 0, 15, 30, 45

Hour0-6(0–23)

Utökas till: 0, 1, 2, 3, 4, 5, 6

Day of month1,15(1–31)

Utökas till: 1, 15

Month*(1–12)

Utökas till: all (1–12)

Day of week1-5(0–6)

Utökas till: 1, 2, 3, 4, 5

Vad är validering av cron-uttryck?

Validering av cron-uttryck är processen att kontrollera om en cron-sträng följer de korrekta syntaxreglerna innan den når en schemaläggare. Ett cron-uttryck använder fem blankstegsavgränsade fält (minut, timme, dag-i-månaden, månad, veckodag) för att definiera ett återkommande schema. Om ett fält innehåller ett värde utanför tillåtet intervall, en ogiltig operator eller ett strukturellt fel som fel antal fält, kommer uttrycket antingen att avvisas av schemaläggaren vid driftsättning eller tyst misslyckas med att matcha någon utlösningstid.

Att validera ett cron-uttryck online fångar fel tidigare än att driftsätta till produktion och vänta på ett missat jobb. Typiska misstag inkluderar att skriva 25 i timfältet (giltigt intervall: 0–23), använda ett steg på noll (*/0, vilket är odefinierat), vända på intervallgränserna (5-1 i stället för 1-5), eller lägga till extra fält som hör till icke-standardformat som Quartz. En syntaxkontroll flaggar dessa problem direkt och talar om exakt vilket fält som är fel.

Cron-validering skiljer sig från cron-tolkning. En tolk tar ett giltigt uttryck och omvandlar det till ett läsbart schema. En validerare svarar på en enklare fråga: är uttrycket välformat? Validera innan du tolkar — det finns ingen anledning att mata en schemaläggare med ett ogiltigt uttryck. I CI/CD-pipelines förhindrar automatiserad cron-validering att felaktiga scheman slås samman i konfigurationsfiler.

Varför använda denna cron-validerare?

Ett cron-uttryck har strikta syntaxregler, och schemaläggare ger inkonsistenta felmeddelanden när dessa regler bryts. Vissa schemaläggare avvisar uttrycket med ett kryptiskt fel; andra accepterar det tyst och utlöser aldrig. Denna validerare ger dig en tydlig, fältvis diagnos innan du driftsätter.

Omedelbar syntaxkontroll
Klistra in eller skriv ett cron-uttryck och se direkt om det passerar valideringen. Ingen formulärinlämning, ingen fördröjning. Resultatet uppdateras medan du skriver.
🔒
Integritetsfokuserad bearbetning
Valideringen körs helt i din webbläsare. Dina cron-uttryck och schemaläggningskonfigurationer skickas aldrig till en server och lagras inte heller.
🔍
Fältvis felrapportering
När ett uttryck är ogiltigt identifierar valideraren vilket fält som orsakade felet och varför. Ingen gissning om vilket av de fem fälten som har problemet.
📋
Inget konto krävs
Öppna sidan och börja kontrollera. Ingen inloggning, ingen API-nyckel, ingen installation. Fungerar på valfri enhet med en modern webbläsare, inklusive mobil.

Användningsfall för cron-valideraren

Frontend-utvecklare
Validera cron-uttryck som användare matar in i schemaläggningsgränssnitt innan de sparas i databasen. Fånga syntaxfel på klientsidan i stället för att vänta på ett avvisande från backend.
Backend-ingenjör
Kontrollera cron-uttryck i uppgiftsköskonfigurationer (Celery beat, Hangfire, Quartz) under kodgranskning. Verifiera att en omstrukturerad schemastränng fortfarande passerar syntaxvalidering.
DevOps / SRE
Validera cron-scheman i Kubernetes CronJob-manifest och CI/CD-pipelinekonfigurationer innan de tillämpas. Förhindra att ett skrivfel i ett säkerhetskopieringsschema passerar obemärkt tills säkerhetskopian missas.
QA-ingenjör
Testa att din applikation korrekt avvisar ogiltigt cron-indata. Generera kända felaktiga uttryck (värden utanför intervall, fel antal fält) och bekräfta att felhanteringen fungerar.
Dataingenjör
Validera cron-utlösare för Airflow DAGs och dbt-schemalagda körningar. Bekräfta att pipelinescheman tolkade från YAML- eller JSON-konfigurationsfiler är syntaktiskt korrekta innan driftsättning.
Student / Nybörjare
Experimentera med cron-syntax och få omedelbar återkoppling på vad som är giltigt och vad som inte fungerar. Lär dig fältintervall, operatorer och kantfall genom att testa uttryck och läsa felmeddelandena.

Vanliga cron-syntaxfel

Tabellen nedan listar de vanligaste felen i cron-uttryck och vad som orsakar dem. Det är misstag som dyker upp upprepade gånger i produktionskonfigurationer och CI/CD-pipelines.

FeltypExempelVad gick fel
Too few fields0 9 * *Missing the day-of-week field. Standard cron requires exactly 5 fields.
Too many fields0 0 9 * * 1 2026Extra fields. Some tools add seconds or year, but standard cron uses 5.
Value out of range0 25 * * *Hour field accepts 0-23. Value 25 exceeds the maximum.
Invalid step base0 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 field0 9 * * 1Double space creates an empty field. Each field needs a value.
Invalid character0 9 * * Mon-FryTypo in day name. Use three-letter abbreviations: MON, TUE, WED, THU, FRI, SAT, SUN.
Reversed range0 9 * * 5-1Range end (1) is less than start (5). Write 1-5 or use a list: 5,6,0,1.

Giltiga och ogiltiga cron-uttryck

En snabbreferens med välformade uttryck bredvid vanliga misstag. Använd detta för att kontrollera ditt uttryck innan du klistrar in det i en schemaläggarkonfiguration.

Giltiga uttryck
* * * * *
0 9 * * 1-5
*/15 * * * *
0 0 1,15 * *
30 2 * * 0
0 */6 * * *
Ogiltiga uttryck
0 9 * *4 fält, behöver 5
0 25 * * *timme max är 23
*/0 * * * *steg kan inte vara 0
0 9 * * 8veckodag max är 6
60 * * * *minut max är 59
0 0 0 * *dag-i-månaden min är 1

Kodexempel

Hur man validerar cron-uttryck programmatiskt i JavaScript, Python, Go och Bash. Varje exempel visar hur man fångar ogiltig syntax och extraherar ett meningsfullt felmeddelande.

JavaScript (Node.js)
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)
Python
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}")
Go
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)
        }
    }
}
Bash
#!/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"

Vanliga frågor

Vad gör ett cron-uttryck ogiltigt?
Ett cron-uttryck är ogiltigt när det bryter mot syntaxreglerna för femfältsformatet. Vanliga orsaker: fel antal fält (färre än 5 eller fler än 5 för standard-cron), ett värde utanför tillåtet intervall (t.ex. timme 25, minut 60, dag-i-månaden 0), ett steg på noll (*/0), omvända intervallgränser (5-1) eller okända tecken. Uttrycket måste ha exakt fem blankstegsavgränsade fält med giltiga värden och operatorer i varje.
Är ett cron-uttryck giltigt om det aldrig utlöses?
Ja, syntaktiskt sett. Ett uttryck som 0 0 31 2 * (den 31 februari) passerar syntaxvalidering eftersom varje fält innehåller värden inom tillåtna intervall. Men det utlöses aldrig eftersom februari aldrig har 31 dagar. De flesta validerare kontrollerar bara syntaxen, inte semantisk korrekthet. Om du behöver fånga omöjliga scheman, beräkna de nästa N körningstiderna och kontrollera om listan är tom.
Hur validerar jag ett cron-uttryck med 6 eller 7 fält?
Standard POSIX cron använder 5 fält. Quartz Scheduler lägger till ett sekundfält i början (6 fält) och ett valfritt årsfält i slutet (7 fält). AWS EventBridge använder 6 fält. Denna validerare kontrollerar standardformatet med 5 fält. För att validera Quartz- eller EventBridge-uttryck, använd ett bibliotek som stöder det utökade formatet, som cron-parser med extended-alternativet i Node.js eller quartz-cron i Java.
Kan jag använda namngivna dagar och månader i cron-uttryck?
De flesta cron-implementationer accepterar tребokstavsförkortningar på engelska för månader (JAN-DEC) och veckodagar (SUN-SAT). Dessa är skiftlägeskänsliga i crontab men kan vara skiftlägeskänsliga i andra system. Namngivna värden kan inte användas i intervall på alla plattformar: MON-FRI fungerar i crontab men inte i alla bibliotek. Om portabilitet är viktigt, använd numeriska värden (1–5 för måndag till fredag).
Varför fungerar mitt cron-uttryck i crontab men misslyckas i Kubernetes?
Kubernetes CronJobs använder samma 5-fältsformat som crontab men tolkas av Go cron-biblioteket, som har striktare validering. Uttryck som crontab tolererar (som avslutande blanksteg, eller både dag-i-månaden och veckodag satta till icke-jokerteckenvärden) kan bete sig annorlunda. Kubernetes använder dessutom controller-managerns tidszon (vanligtvis UTC) som standard, inte nodens lokala tidszon. Validera alltid uttrycket mot den specifika schemaläggare du driftsätter till.
Hur bör jag validera cron-uttryck i en CI/CD-pipeline?
Lägg till ett valideringssteg som körs före driftsättning. I ett Node.js-projekt, använd cron-parser eller cron-validator i en testfil som läser cron-strängar från din konfiguration och kontrollerar att de tolkas utan fel. I Python, använd croniter.is_valid(). I ett skalskript, anropa valideringsfunktionen och avsluta med en kod skild från noll vid fel. Detta fångar skrivfel och inklistrade fel innan de når produktion.
Vad är skillnaden mellan cron-validering och cron-lintning?
Validering kontrollerar om ett uttryck är syntaktiskt korrekt: rätt antal fält, värden inom intervall, giltiga operatorer. Lintning går längre genom att kontrollera troliga misstag som är tekniskt giltiga: scheman som aldrig utlöses (31 februari), överlappande jobb, stegvärden som hoppar över förväntade intervall (*/7 återställs varje timme), eller scheman utan tidszonsdokumentation. Validering svarar på frågan 'kommer detta att tolkas?' Lintning svarar på 'är detta förmodligen vad du menade?'