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); // truePython (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.