🔍Regex Recipes
Semantic Version (x.y.z)
Validate semantic versioning with optional prerelease and build metadata.
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-]+)*))?$Explanation
Full semver validation including major.minor.patch, prerelease (after -), and build metadata (after +).
Examples
Basic
Input
1.0.0
Output
✓ Match
With prerelease
Input
1.0.0-alpha
Output
✓ Match
Full format
Input
1.0.0-beta.1+build.123
Output
✓ Match
Invalid - leading zero
Input
01.0.0
Output
✗ No match
Code Examples
JavaScript
// Simple version (major.minor.patch only)
const simpleVersion = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/;
// Parse version
function parseVersion(version) {
const match = version.match(simpleVersion);
if (!match) return null;
return {
major: parseInt(match[1]),
minor: parseInt(match[2]),
patch: parseInt(match[3])
};
}
// Compare versions
function compareVersions(a, b) {
const vA = parseVersion(a);
const vB = parseVersion(b);
if (!vA || !vB) return 0;
if (vA.major !== vB.major) return vA.major - vB.major;
if (vA.minor !== vB.minor) return vA.minor - vB.minor;
return vA.patch - vB.patch;
}Try it Now
💡 Tips
- Major.minor.patch must be non-negative integers
- Prerelease: -alpha, -beta.1, -rc.2
- Build metadata: +build.123, +sha.5114f85
- Use semver library (npm) for full support
⚠️ Common Pitfalls
- Leading zeros not allowed (01.0.0 is invalid)
- Prerelease versions compare differently
- Use semver library for production
- Build metadata ignored in version precedence