nats-io/nats-server · error
too many hyphens: %s
Error message
too many hyphens: %s
What it means
getRange splits a cron field on '/' for steps and '-' for ranges; a range part containing more than two hyphen-separated endpoints is rejected. Only a single 'low-high' range is supported per expression segment.
Source
Thrown at server/cron.go:198
if lowAndHigh[0] == "*" || lowAndHigh[0] == "?" {
start = r.min
end = r.max
extra = starBit
} else {
start, err = parseIntOrName(lowAndHigh[0], r.names)
if err != nil {
return 0, err
}
switch len(lowAndHigh) {
case 1:
end = start
case 2:
end, err = parseIntOrName(lowAndHigh[1], r.names)
if err != nil {
return 0, err
}
default:
return 0, fmt.Errorf("too many hyphens: %s", expr)
}
}
switch len(rangeAndStep) {
case 1:
step = 1
case 2:
step, err = mustParseInt(rangeAndStep[1])
if err != nil {
return 0, err
}
// Special handling: "N/step" means "N-max/step".
if singleDigit {
end = r.max
}
if step > 1 {
extra = 0
}View on GitHub (pinned to 3a66a489d2)
Solutions
- Express multiple ranges as a comma list: "1-3,5-7"
- Use only one hyphen per segment: "1-5"
- Use '*' with a step if uniform coverage is intended: "*/2"
Example fix
// before expr := "1-3-5" // after expr := "1-3,5"
Defensive patterns
Strategy: validation
Validate before calling
for _, seg := range strings.Fields(pattern) {
low := strings.SplitN(strings.SplitN(seg, "/", 2)[0], "-", 2)
for _, part := range low {
if strings.Count(part, "-") > 1 {
return fmt.Errorf("too many hyphens in %q", part)
}
}
} Prevention
- One hyphen per segment; join multiple ranges with commas
- Lint cron strings before storing them in config
When it happens
Trigger: A cron field segment containing multiple '-' ranges, e.g. hours field "1-3-5" or "1-2-4-6", passed while parsing the schedule via getField/getRange.
Common situations: Hand-writing cron with concatenated ranges instead of comma-separated ones; accidentally repeating a range separator.
Related errors
- pattern requires 6 fields, got %d
- too many slashes: %s
- beginning of range (%d) below minimum (%d): %s
- end of range (%d) above maximum (%d): %s
- beginning of range (%d) beyond end of range (%d): %s
AI-assisted analysis of nats-io/nats-server@3a66a489d2 (2026-09-02).
Data as JSON: /api/errors/5516a83fcf44595d.
Report an issue: GitHub.