mistralys / version-parser
用于解析版本号的类。
Requires
- php: >=7.4
- symfony/polyfill-php80: >=v1.26.0
Requires (Dev)
- phpstan/phpstan: >=0.12
- phpunit/phpunit: >=8.5
README
PHP 工具,用于解析应用程序版本字符串,检索版本信息,并将其转换为数字构建号(浮点数或整数)。支持发布标签,如 alpha、beta 和 release candidate,以及自定义分支名称。
支持的版本字符串
解析器期望版本以以下格式存在
主版本号.次版本号.修订号-分支或标签
这允许使用广泛的版本字符串。一些示例
1
1.1
1.1.5
1.145.147
1.1.5-rc1
1.1.5-beta
1.1.5-beta2
1.1.5-beta.42
1.1.5-BranchName
1.1.5-BranchName-alpha2
1.1.5 BranchName A2
允许空格1.1.5 "Branch name"
引号将被去除1.1.5 (BranchName) / Alpha 2
特殊字符将被过滤掉1.1.5-DEV Branch Name
标签类型后面的分支名称
大多数特殊字符都会被过滤掉,这意味着它在处理传递给它的事物时非常宽松。在版本号之后,任何不是标签限定符(如 beta
、alpha
等)的东西都被认为是分支名称。
安装
只需使用 composer 包管理器。
通过命令行
composer require mistralys/version-parser
通过 composer.json
{ "require": { "mistralys/version-parser": "dev-master" } }
用法
获取单个版本号
use Mistralys\VersionParser\VersionParser; $version = VersionParser::create('1.5.2'); $major = $version->getMajorVersion(); // 1 $minor = $version->getMinorVersion(); // 5 $patch = $version->getPatchVersion(); // 2
获取不带标签的版本
use Mistralys\VersionParser\VersionParser; $version = VersionParser::create('1.5.2-RC3'); $number = $version->getVersion(); // 1.5.2
版本被标准化以显示所有三个级别,即使它们没有被指定。
use Mistralys\VersionParser\VersionParser; $version = VersionParser::create('1'); $number = $version->getVersion(); // 1.0.0
获取简短版本
方法 getShortVersion()
获取具有可能最低级别的版本字符串。
use Mistralys\VersionParser\VersionParser; $version = VersionParser::create('1.0.0'); $number = $version->getVersion(); // 1
获取完整版本,已标准化
use Mistralys\VersionParser\VersionParser; $version = VersionParser::create("1.2.0 'Cool Release' RC5"); $normalized = $version->getTagVersion(); // 1.0.0-CoolRelease-rc5
注意:分支名称也被标准化。单词的首字母大写,空格被删除。其他特殊字符被保留。
检查标签类型
要检查发布类型,可以使用简写方法 isBeta()
、isAlpha()
等。有关详细信息,请参阅“支持的发布标签”。
use Mistralys\VersionParser\VersionParser; $version = VersionParser::create('1.5.2-beta'); $isBeta = $version->isBeta(); // true
或者,可以手动检查标签类型。
use Mistralys\VersionParser\VersionParser; $version = VersionParser::create('1.5.2-beta5'); if($version->getTagType() === VersionParser::TAG_TYPE_BETA) { // is a beta version }
可以通过 getTagInfo()
方法访问的标签信息对象可以提供更深入的信息。
例如,方法 getTagName()
将返回版本字符串中使用的标签类型,而 getTagType()
只返回长类型变体(例如,beta
而不是 b
)
use Mistralys\VersionParser\VersionParser; $tag = VersionParser::create('1.5.2-B2')->getTagInfo(); if($tag !== null) { echo $tag->getTagName(); // b echo $tag->getTagType(); // beta }
获取标签号
如果没有添加数字到标签,则假定它是标签 #1。
use Mistralys\VersionParser\VersionParser; $version = VersionParser::create('1.5.2-beta'); $betaVersion = $version->getTagNumber(); // 1 (implicit)
添加数字
use Mistralys\VersionParser\VersionParser; $version = VersionParser::create('1.5.2-beta5'); $betaVersion = $version->getTagNumber(); // 5
获取分支名称
use Mistralys\VersionParser\VersionParser; $version = VersionParser::create('1.5.2-Foobar'); $hasBranch = $version->hasBranch(); // true $branchName = $version->getBranchName(); // Foobar
这也可以与发布标签一起使用
use Mistralys\VersionParser\VersionParser; $version = VersionParser::create('1.5.2-Foobar-RC1'); $hasBranch = $version->hasBranch(); // true $branchName = $version->getBranchName(); // Foobar
分支名称可以包含特殊字符。引号将被过滤掉
use Mistralys\VersionParser\VersionParser; $version = VersionParser::create('1.5.2 "Foobar/42"'); $hasBranch = $version->hasBranch(); // true $branchName = $version->getBranchName(); // Foobar/42
设置分隔符字符
默认情况下,当标准化版本字符串时,分支名称和标签用连字符(-
)分隔。这可以调整到任何字符
use Mistralys\VersionParser\VersionParser; $version = VersionParser::create('1.5.2-BranchName-alpha5'); echo $version ->setSeparatorChar('_') ->getTagVersion();
输出
1.5.2_BranchName_alpha5
将标签类型转换为大写
默认情况下,当标准化版本字符串时,标签类型被转换为小写。它们可以切换为大写
use Mistralys\VersionParser\VersionParser; $version = VersionParser::create('1.5.2-BranchName-alpha5'); echo $version ->setTagUppercase() ->getTagVersion();
输出
1.5.2-BranchName-ALPHA5
支持的发布标签
解析器将自动处理以下标签,并分配一个构建号值
dev
或snapshot
- 开发版本,权重:8
alpha
- Alpha 版本,权重:6
beta
- Beta 版本,权重:4
rc
- 发布候选,权重:2
patch
- 补丁/错误修复版本,权重:1
stable
- 稳定版本,权重:0
这意味着,比较具有不同发布标签的相同版本号将有效。例如,1.4-beta
被视为比 1.4-alpha
更高的版本,因为 beta
的权重低于 alpha
。
标签编号
还支持编号标签版本
1.0-alpha
- 默认alpha1
1.0-alpha2
- Alpha2
添加自定义标签
如果您在应用程序的版本字符串中使用其他标签类型,可以添加它们,以便解析器可以识别它们
use Mistralys\VersionParser\VersionParser; // The third parameter is the short variant of the tag type. VersionParser::registerTagType('foobar', 5, 'f'); $version = VersionParser::create('1.0.5-foobar2'); $short = VersionParser::create('1.0.5-F2'); echo $version->getTagType(); // foobar echo $short->getTagType(); // foobar
如果混合了自定义标签类型和标准类型,请注意为它们设置的排序权重,以确保它们按正确的方式加权。如果需要,您可以将默认类型的权重更改,以便有更多的空间。
例如,这将为一些现有的标签类型重置权重,并插入新的标签类型
use Mistralys\VersionParser\VersionParser; $weight = 900; // Can be any number VersionParser::registerTagType(VersionParser::TAG_TYPE_ALPHA, $weight--); VersionParser::registerTagType(VersionParser::TAG_TYPE_BETA, $weight--); VersionParser::registerTagType('foobar', $weight--); VersionParser::registerTagType(VersionParser::TAG_TYPE_RELEASE_CANDIDATE, $weight--); VersionParser::registerTagType('prefinal', $weight--);
注意:这些权重用于生成的构建号。更改默认标签类型的权重将同时更改它们的构建号。
构建号
版本字符串被智能地转换为数字,以便进行比较和排序。这包括像 alpha
或 beta
这样的发布标签,这些标签也被转换。结果是构建号,它可以是浮点数或整数。
注意:这些数字不是为了人类可读而设计的。它们的主要目的是程序化地识别版本号。
与此相关有两个方法
use \Mistralys\VersionParser\VersionParser; $version = VersionParser::create('1.0-alpha2'); $float = $version->getBuildNumber(); $int = $version->getBuildNumberInt();
版本排序
排序版本的最佳方法是使用构建号,这允许数值比较。以下是一个按升序排序它们的示例
use \Mistralys\VersionParser\VersionParser; $versions = array( VersionParser::create('1.1'), VersionParser::create('2'), VersionParser::create('1.5.9'), VersionParser::create('1.5.9-beta'), VersionParser::create('2.0.0-alpha') ); usort($versions, static function (VersionParser $a, VersionParser $b) : int { return $a->getBuildNumberInt() - $b->getBuildNumberInt(); });
这将按以下方式排序列表
1.1.0
1.5.9-beta
1.5.9
2.0.0-alpha
2.0.0