mistralys/version-parser

用于解析版本号的类。

2.1.1 2023-12-19 07:17 UTC

This package is auto-updated.

Last update: 2024-09-19 08:47:04 UTC


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 标签类型后面的分支名称

大多数特殊字符都会被过滤掉,这意味着它在处理传递给它的事物时非常宽松。在版本号之后,任何不是标签限定符(如 betaalpha 等)的东西都被认为是分支名称。

安装

只需使用 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

支持的发布标签

解析器将自动处理以下标签,并分配一个构建号值

  • devsnapshot - 开发版本,权重: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 - Alpha 2

添加自定义标签

如果您在应用程序的版本字符串中使用其他标签类型,可以添加它们,以便解析器可以识别它们

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--);

注意:这些权重用于生成的构建号。更改默认标签类型的权重将同时更改它们的构建号。

构建号

版本字符串被智能地转换为数字,以便进行比较和排序。这包括像 alphabeta 这样的发布标签,这些标签也被转换。结果是构建号,它可以是浮点数或整数。

注意:这些数字不是为了人类可读而设计的。它们的主要目的是程序化地识别版本号。

与此相关有两个方法

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.1.0
  2. 1.5.9-beta
  3. 1.5.9
  4. 2.0.0-alpha
  5. 2.0.0