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

  1. Express multiple ranges as a comma list: "1-3,5-7"
  2. Use only one hyphen per segment: "1-5"
  3. 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

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


AI-assisted analysis of nats-io/nats-server@3a66a489d2 (2026-09-02). Data as JSON: /api/errors/5516a83fcf44595d. Report an issue: GitHub.