HomeRegex LibrarySemantic Versioning (SemVer 2.0.0) Regex
100% Client-Side β€’ 0 B Data Leaves Browser
validation

Semantic Versioning (SemVer 2.0.0) Regex

Official SemVer 2.0.0 regular expression supporting MAJOR.MINOR.PATCH, prerelease identifiers, and build metadata.

Regular Expression Pattern:
/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/
Valid Match Example:
2.1.0-alpha.1+build.847
Invalid / Non-Match Example:
01.2.3

Regex Syntax Breakdown & Explanation

  • β€’^(0|[1-9]\d*) : Major version with no leading zeros
  • β€’\.(0|[1-9]\d*) : Minor version with no leading zeros
  • β€’\.(0|[1-9]\d*) : Patch version with no leading zeros
  • β€’(?:-((...)))? : Optional prerelease tag (e.g. -beta.1)
  • β€’(?:\+((...)))? : Optional build metadata (e.g. +sha.49a8f2)

Implementation in Popular Languages

JavaScript / TypeScript
const regex = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;
const isValid = regex.test("2.1.0-alpha.1+build.847");
console.log(isValid); // true
Python (re)
import re

pattern = r"^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$"
match = re.match(pattern, "2.1.0-alpha.1+build.847")
print(bool(match)) # True
Go (regexp)
package main
import (
  "fmt"
  "regexp"
)

func main() {
  re := regexp.MustCompile(`^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$`)
  fmt.Println(re.MatchString("2.1.0-alpha.1+build.847"))
}
Frequently Asked Questions

Frequently Asked Questions

Everything you need to know regarding specifications, syntax, and security best practices.

The regular expression pattern is /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/. Official SemVer 2.0.0 regular expression supporting MAJOR.MINOR.PATCH, prerelease identifiers, and build metadata.