Validate a Semver String — Is It Valid Semantic Versioning?

Check whether a version string is valid semantic versioning. Learn the exact format rules for MAJOR.MINOR.PATCH, pre-release identifiers, and build metadata.

Validation

Detailed Explanation

Validating a Semver String

Not every version-like string is valid SemVer. The specification is strict about what counts as a well-formed semantic version.

The Official Format

A valid SemVer string must match this pattern:

MAJOR.MINOR.PATCH[-PRERELEASE][+BUILD]

Where:

  • MAJOR, MINOR, PATCH are non-negative integers with no leading zeros
  • PRERELEASE (optional) is a series of dot-separated identifiers (alphanumeric and hyphens)
  • BUILD (optional) is a series of dot-separated identifiers (alphanumeric and hyphens)

Valid Examples

String Valid? Why
1.2.3 ✅ Standard three-part version
0.0.0 ✅ Zeros are valid
1.2.3-alpha.1 ✅ Pre-release identifier
1.2.3+build.42 ✅ Build metadata
1.2.3-beta.1+sha.abc ✅ Both pre-release and build

Invalid Examples

String Valid? Why
1.2 ❌ Missing PATCH component
01.2.3 ❌ Leading zero in MAJOR
1.2.3.4 ❌ Four components not allowed
v1.2.3 ❌ "v" prefix is not part of SemVer
1.2.3- ❌ Empty pre-release identifier
1.2.3+ ❌ Empty build metadata
1.2.3-beta..1 ❌ Empty identifier between dots

The "v" Prefix Myth

Many ecosystems (Git tags, Go modules) use a v prefix like v1.2.3. This is not part of the SemVer spec — it is a convention layered on top. Strict validation should reject it, but many tools strip it automatically.

Leading Zeros

SemVer explicitly prohibits leading zeros in numeric identifiers: 01.2.3 is invalid. This prevents ambiguity between numeric and string comparison. However, pre-release identifiers like alpha.01 are treated as strings (since they start with zero) and are valid.

Validation Regex

The official SemVer regex is complex, but a simplified version for basic validation:

^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*)?(\+[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*)?$

Use Case

Validating user input in CI/CD pipelines, package publishing scripts, or version bump tools to ensure only well-formed SemVer strings are accepted before tagging a release.

Try It — Semver Calculator

Open full tool →