测试给定的字符串是否是版本号

Test if String Given is A Version Number

有没有办法测试给定的字符串是否是版本号?我有一些用户输入,我需要验证提供给我的字符串是否可以用作版本号。我已经看到 PHP 有一个 version_compare() 函数,但这看起来像是将两个版本相互比较。

我假设给定的字符串应该是 "PHP-Standardized" 版本。

我不确定这是否是最好的方法,但使用 version_compare() 我只是通过过滤掉 'non-version' 字符串来确保它至少是 0.0.1

version_compare( $given_version, '0.0.1', '>=' )

例如:

if( version_compare( $_POST['_plugin_vers'], '0.0.1', '>=' ) >= 0 ) {
    echo 'Valid Version';
} else {
    echo 'Invalid Version';
}
if(preg_match('/^(\d+\.)?(\d+\.)?(\*|\d+)$/', $string)){
  echo 'Valid';
} else {
  echo 'Invalid';
}
$versions = [
    '1',
    '1.0',
    '1.001',
    '1.0.1',
    '1.00.1',
    '1.0.01',
    '10.0.1',
    '10.01.10',
    '1.0.0-beta',
    '1.0.0-rc1',
    '5.5.9-1ubuntu4.17',
    '\'DROP DATABASE',
    '1.2.3<script>xss</script>'
];

foreach ($versions as $version) {
    if (preg_match('#^(\d+\.)?(\d+\.)?(\d+)(-[a-z0-9]+)?$#i', $version, $matches) !== 0) {
        var_dump($matches[0]);
    } else {
        echo 'Could not find version number in string: ' . $version;
    }
    echo PHP_EOL;
}

结果:

string(1) "1"
string(3) "1.0"
string(5) "1.001"
string(5) "1.0.1"
string(6) "1.00.1"
string(6) "1.0.01"
string(6) "10.0.1"
string(8) "10.01.10"
string(10) "1.0.0-beta"
string(9) "1.0.0-rc1"
Could not find version number in string: 5.5.9-1ubuntu4.17
Could not find version number in string: 'DROP DATABASE
Could not find version number in string: 1.2.3<script>xss</script>