在 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);
我正在尝试使用 \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);