测试给定的字符串是否是版本号
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>
有没有办法测试给定的字符串是否是版本号?我有一些用户输入,我需要验证提供给我的字符串是否可以用作版本号。我已经看到 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>