2015-03-06 2 views
2

Есть ли способ проверить, является ли данная строка номером версии или нет? У меня есть пользовательский ввод, и мне нужно проверить, что строка, предоставленная мне, может использоваться как номер версии. Я видел, что PHP имеет функцию version_compare(), но это похоже на сравнение двух версий друг с другом.Тест, если String задано является номером версии

Я предполагаю, что данная строка должна быть «версией, основанной на PHP».

+1

Используйте регулярное выражение, как '/^([0-9]+)\.([0-9]+)\.([0-9]+ (?: - ([0-9A-Za-Z -] + (: \ [0-9A-Za-Z -] +) *?.))) (:? \ + [0-9A-запорожец г -] +) $/'? –

+0

Регулярное выражение выше не на 100% точно. Тем не менее, вы получите довольно близко. В основном потому, что в конце версии есть только определенные строки: dev, alpha, a, beta, b, RC, rc, pl, p. Все остальные слова и символы отображаются как недействительные. –

ответ

4

Я не уверен, если это лучший способ, но с использованием version_compare() я просто гарантирующим это было, по крайней мере 0.0.1:

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

Каких отфильтровывает «не-версию» строку.

Например:

if(version_compare($_POST['_iq_plugin_vers'], '0.0.1', '>=') >= 0) { 
    echo 'Valid Version'; 
} else { 
    echo 'Invalid Version'; 
] 
+0

Будет ли это работать с словами 'alpha' и' beta' в строке? –

+0

@ OlleHärstedt, yep. От php.net: функция сначала заменяет _, - и + точкой. в версиях, а также вставляет точки. до и после любого не номера, так что, например, «4.3.2RC1» становится «4.3.2.RC.1». Затем он сравнивает части, начинающиеся слева направо. Если часть содержит специальные строки версии, они обрабатываются в следующем порядке: любая строка, не найденная в этом списке

0
if(preg_match('/^(\d+\.)?(\d+\.)?(\*|\d+)$/', $string)){ 
    echo 'Valid'; 
} else { 
    echo 'Invalid'; 
} 
Смежные вопросы