Skip to content

[Validator] Add SemVer constraint for semantic versioning validation #60995

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 14 commits into
base: 7.4
Choose a base branch
from

Conversation

OskarStark
Copy link
Contributor

@OskarStark OskarStark commented Jun 30, 2025

Q A
Branch? 7.4
Bug fix? no
New feature? yes
Deprecations? no
Docs. symfony/symfony-docs#21162
License MIT

Add a new constraint to validate semantic versioning strings according to the SemVer 2.0.0 specification. Supports partial versions (e.g., "3", "3.1"), full versions (e.g., "3.1.2"), optional "v" prefix, pre-release versions (e.g., "3.1.2-beta"), and build metadata (e.g., "3.1.2+20130313144700").

Configurable options

  • strict (default: true)

Add a new constraint to validate semantic versioning strings according to
the SemVer 2.0.0 specification. Supports partial versions (e.g., "3", "3.1"),
full versions (e.g., "3.1.2"), optional "v" prefix, pre-release versions
(e.g., "3.1.2-beta"), and build metadata (e.g., "3.1.2+20130313144700").

Configurable options:
- requirePrefix: Enforce the "v" prefix
- allowPreRelease: Allow pre-release versions (default: true)
- allowBuildMetadata: Allow build metadata (default: true)
@carsonbot carsonbot added this to the 7.4 milestone Jun 30, 2025
@OskarStark OskarStark changed the title [Validator] Add SemVer constraint for semantic versioning validation [Validator] Add SemVer constraint for semantic versioning validation Jun 30, 2025
- Add missing newlines at end of files
- Break up long regex patterns with inline comments for better readability
- Convert PHPDoc @dataProvider annotations to PHP 8 attributes
- Fix LOOSE_SEMVER_PATTERN to only allow pre-release and build metadata with full version (major.minor.patch)
- Remove empty string from invalid test cases as it's handled separately
- Revert to PHPDoc @dataProvider annotations for PHPUnit 9.6 compatibility
@xabbuh
Copy link
Member

xabbuh commented Jul 1, 2025

Is checking for a version really common enough to justify adding it to the Validator component?

@OskarStark
Copy link
Contributor Author

I also thought about just using regex, but as you can see, the regex(es) itself are quite complicated, so I thought it would be a nice addition.

Ofc lets wait what others say

- Replace requirePrefix, allowPreRelease, and allowBuildMetadata with a single 'strict' boolean option
- When strict=true: follows official SemVer spec (no 'v' prefix, requires full version)
- When strict=false: allows common variations (partial versions, 'v' prefix)
- Update tests to reflect the new behavior
- Default behavior now follows the official SemVer specification
- Users must explicitly set strict=false to allow loose validation
- Remove off on off off off off off off off off on off on off on off off off on off off off on on off off off on on off off off off off off off on off off off off on off on off off off off off on off on on off off off on off on on off on on off off on on on off on on off on off off off off on off off off on off off on off on off off off on on off on off on off off on off off off on off off off off off off off off on off on off on on on off on on off off on off on on on off on on off on off on off off off off off on on off off on off off off off off on off off on on off on off off on off off off on off off off off on on off on off off off off off on off on off off off off off off off off off off on on off on off off off parameter from constructor as array-based configuration is deprecated in Symfony 8.0
- Only support named arguments for configuration
- This follows the modern Symfony constraint pattern
@OskarStark
Copy link
Contributor Author

Do you agree with the default true value for strict option?

- Convert regex patterns to multi-line format with x modifier
- Add inline comments to explain each part of the pattern
- Makes complex regex patterns more maintainable
- Add HasNamedArguments attribute for XML/YAML mapping compatibility
- Move property defaults to constructor arguments as non-nullable
- Follow modern Symfony constraint pattern
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants