Back to Home

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!

Generate Regex Pattern

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

ComponentDescriptionMatches
^Start anchorEnsures match from string start
(0|[1-9]\d*)Major version0 or positive integer (no leading zeros)
\.SeparatorLiteral dot
(0|[1-9]\d*)Minor version0 or positive integer (no leading zeros)
\.SeparatorLiteral dot
(0|[1-9]\d*)Patch version0 or positive integer (no leading zeros)
(?:-...)?Optional pre-releaseOptional hyphen and pre-release identifiers
(?:\+...)?Optional build metadataOptional plus and build identifiers
$End anchorEnsures match to string end

Detailed Breakdown

  • (0|[1-9]\d*) - Version number: either 0 or 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
  • (?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))? - Build metadata:
    • Optional plus +
    • Identifiers separated by dots

Examples

Valid:

  • 1.0.0
  • 2.1.3
  • 10.20.30
  • 1.0.0-alpha
  • 1.0.0-alpha.1
  • 1.0.0-alpha.1.beta
  • 1.0.0+20130313144700
  • 1.0.0-alpha+001
  • 1.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

  1. Complex pattern: Very long and hard to read/maintain
  2. No version comparison: Only validates format, doesn't compare versions
  3. No range validation: Doesn't validate version ranges (e.g., ^1.0.0, ~2.1.0)
  4. Format only: Validates format per SemVer spec, not semantic meaning
  5. 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., semver npm 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!

Generate Regex Pattern