private function sanitize_version($version)
{
$version = strtolower($version);
// Normalize separators.
$version = str_replace(['_', '-', '+'], '.', $version);
// Remove invalid characters.
$version = preg_replace('~[^a-z0-9\\.]*~', '', $version);
if ('' === $version) {
return '';
}
// Reduce repeating dots to one dot only.
$version = preg_replace('~\\.\\.+~', '.', $version);
// Insert a dot between a numeric character followed by a non-numeric one (i.e., "2beta1" becomes "2.beta1").
$version = preg_replace('~([0-9])([a-z])~', '$1.$2', $version);
// Insert a dot between a non-numeric character followed by a numeric one (i.e., "2beta1" becomes "2beta.1").
$version = preg_replace('~([a-z])([0-9])~', '$1.$2', $version);
return $version;
}