Semantic Versioning Validation Regex
• CronOS Team
regexversionvalidationtutorialsemver
Need to generate a regex pattern?
Use CronOS to generate any regex pattern you wish with natural language. Simply describe what you need, and we'll create the perfect regex pattern for you. It's completely free!
Semantic Versioning Validation Regex
Validate semantic version numbers (SemVer) including major.minor.patch with optional pre-release and build metadata using comprehensive regex pattern.
Pattern Breakdown
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-]+)*))?$
Components
| Component | Description | Matches |
|---|---|---|
^ | Start anchor | Ensures match from string start |
(0|[1-9]\d*) | Major version | 0 or positive integer (no leading zeros) |
\. | Separator | Literal dot |
(0|[1-9]\d*) | Minor version | 0 or positive integer (no leading zeros) |
\. | Separator | Literal dot |
(0|[1-9]\d*) | Patch version | 0 or positive integer (no leading zeros) |
(?:-...)? | Optional pre-release | Optional hyphen and pre-release identifiers |
(?:\+...)? | Optional build metadata | Optional plus and build identifiers |
$ | End anchor | Ensures match to string end |
Detailed Breakdown
(0|[1-9]\d*)- Version number: either0or positive integer without leading zeros(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?- Pre-release:- Optional hyphen
- - Identifiers separated by dots
- Can be numeric or alphanumeric
- Optional hyphen
(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?- Build metadata:- Optional plus
+ - Identifiers separated by dots
- Optional plus
Examples
Valid:
1.0.02.1.310.20.301.0.0-alpha1.0.0-alpha.11.0.0-alpha.1.beta1.0.0+201303131447001.0.0-alpha+0011.0.0-beta.2+exp.sha.5114f85
Invalid:
01.0.0(leading zero in major)1.00.0(leading zero in minor)1.0.00(leading zero in patch)1.0(missing patch version)1.0.0.0(too many version parts)v1.0.0(version prefix not supported)1.0.0-(incomplete pre-release)
Implementation
JavaScript
javascript
const semverRegex = /^(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-]+)*))?$/;
semverRegex.test('1.0.0'); // true
semverRegex.test('2.1.3-alpha.1'); // true
semverRegex.test('1.0.0+20130313144700'); // true
semverRegex.test('01.0.0'); // false (leading zero)
semverRegex.test('1.0'); // false (missing patch)
Python
python
import re
semver_regex = 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-]+)*))?$'
bool(re.match(semver_regex, '1.0.0')) # True
bool(re.match(semver_regex, '2.1.3-alpha.1')) # True
bool(re.match(semver_regex, '01.0.0')) # False (leading zero)
Go
go
semverRegex := 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-]+)*))?$`)
semverRegex.MatchString("1.0.0") // true
semverRegex.MatchString("2.1.3-alpha.1") // true
semverRegex.MatchString("01.0.0") // false (leading zero)
Limitations
- Complex pattern: Very long and hard to read/maintain
- No version comparison: Only validates format, doesn't compare versions
- No range validation: Doesn't validate version ranges (e.g.,
^1.0.0,~2.1.0) - Format only: Validates format per SemVer spec, not semantic meaning
- Performance: Complex pattern may be slower for very long strings
When to Use
- Semantic version validation
- Package version checking
- API version validation
- When you need strict SemVer format checking
- Version input forms
For production, consider:
- Using SemVer parsing libraries (e.g.,
semvernpm package) - Supporting version ranges if needed
- Implementing version comparison functions
- Handling version prefixes (e.g.,
v1.0.0) - Using specialized version management libraries
Need to generate a regex pattern?
Use CronOS to generate any regex pattern you wish with natural language. Simply describe what you need, and we'll create the perfect regex pattern for you. It's completely free!