Reputation: 10645
Is there a way to test if a given string is a versioning number or not? I have some user input and I need to verify that the string being given to me can be used as a versioning number. I've seen that PHP has a version_compare()
function but that looks like compareing two versions to one another.
I am assuming the given string should be a "PHP-Standardized" version.
Upvotes: 7
Views: 3838
Reputation: 17188
$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;
}
Result:
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>
Upvotes: 2
Reputation: 10645
I'm not sure if this is the best way but using the version_compare()
I just ensured that it was at least 0.0.1
by filtering out 'non-version' strings:
version_compare( $given_version, '0.0.1', '>=' )
For example:
if( version_compare( $_POST['_plugin_vers'], '0.0.1', '>=' ) >= 0 ) {
echo 'Valid Version';
} else {
echo 'Invalid Version';
}
Upvotes: 11
Reputation: 3485
if(preg_match('/^(\d+\.)?(\d+\.)?(\*|\d+)$/', $string)){
echo 'Valid';
} else {
echo 'Invalid';
}
Upvotes: 3