在 PHP 中使用通配符解析包版本以进行比较

Parsing package versions with wildcards for comparison in PHP

我正在尝试使用 \Composer\Semver\VersionParser 比较软件包版本,例如 ^6.1||^6.2||^6.3,但没有得到预期的结果。

我是这样分解版本的

            $currentVersion = '6.3';
            $requiredPackage = '^6.1||^6.2||^6.3';
            $compatibleVersions = explode('||', $requiredPackage);
            $lowestSupported = ltrim(current($compatibleVersions), '^');
            $highestSupported = ltrim(end($compatibleVersions), '^');

            $parser = new VersionParser();
            $lowestSupported = $parser->normalize($lowestSupported);
            $highestSupported = $parser->normalize($highestSupported);

            $isLower = version_compare($currentVersion, $lowestSupported, '<');
            $isHigher = version_compare($currentVersion, $highestSupported, '>');

            if ($isLower || $isHigher) {
                return false;
            }

这适用于 $currentVersion 为 6.3 的情况,但我认为它对 6.3.4.0 会失败,因为虽然 ^6.3 匹配包,但由于 VersionParser 规范化版本 6.3 改为 6.3.0.0,它无法正确解析 ^6.3 以允许 6.3.4.0.

有什么想法吗?

我能够使用 Nico Haase 的建议完成它,如下所示:

$isLower = Comparator::lessThan($currentVersion, $lowestSupported);
$isHigher = Comparator::greaterThan($highestSupported, $currentVersion);