Перейти к основному содержимому

Сравнение двух номеров версий (string.compare_version)

Объявление

результат_сравнения = string.compare_version(номер_версии_a, номер_версии_b)

Параметры

  • Номер версии A, номер версии B
    Строки, два номера версий для сравнения.

Возвращаемое значение

  • Результат сравнения
    Целое число: 1, если номер версии A больше номера версии B; -1, если номер версии A меньше номера версии B; 0, если номера версий равны.

Описание

Сравнивает строки с номерами версий по следующим правилам.
Используются только числовые значения, разделённые точкой ., дефисом - или пробелом.
Разные разделители равнозначны, а несколько последовательных разделителей считаются одним.
Вес сегментов постепенно уменьшается слева направо.
При встрече любого недопустимого символа сравнение обрывается, а последующее содержимое не учитывается.
Если число сегментов различается, недостающие сегменты дополняются '0'.
Пустая или недопустимая строка считается номером версии '0'.
Например, '1.1' и '1.1.0' — одинаковые номера версий.
Например, '1.1' и '1.1-0' — одинаковые номера версий.
Например, '1.1' и '1-1' — одинаковые номера версий.
Например, '1.0' и '1 0' (между 1 и 0 стоит пробел) — одинаковые номера версий.
Например, '1.0' больше '0.99999'.
Функцию можно использовать в XUI.

Пример

-- "1.5", "1.05" и "1.005" — одна и та же версия
-- "1.5", "1.50" и "1.500" — три разных номера версий
-- "1.11" больше "1.5"
-- "1.52" равно "1.52.0"
assert(string.compare_version("", "") == 0)
assert(string.compare_version("1", "") == 1)
assert(string.compare_version("", "1") == -1)
assert(string.compare_version("1", "1") == 0)
assert(string.compare_version("1.0", "1") == 0)
assert(string.compare_version("1", "1.0") == 0)
assert(string.compare_version("1.", "1") == 0)
assert(string.compare_version("1", "1.") == 0)
assert(string.compare_version("1.", "1.0") == 0)
assert(string.compare_version("1.0", "1.") == 0)
assert(string.compare_version("1.0", "1.0") == 0)
assert(string.compare_version("1.0.0", "1.0.0") == 0)
assert(string.compare_version("1.1", "1.0") == 1)
assert(string.compare_version("1.0", "1.1") == -1)
assert(string.compare_version("1.1", "1.10") == -1)
assert(string.compare_version("1.2", "1.11") == -1)
assert(string.compare_version("1.1", "1.1.1") == -1)
assert(string.compare_version("1.2", "1.1.1") == 1)
assert(string.compare_version("1.0", "0.99999") == 1)
assert(string.compare_version("1.10.1", "1.10") == 1)
assert(string.compare_version("1.2-4", "1.2-3") == 1)
assert(string.compare_version("1.2-3", "1.2.3") == 0)
assert(string.compare_version("1.2-4", "1.2.3.0") == 1)
assert(string.compare_version("1.2-4", "1.2.3.10") == 1)
assert(string.compare_version("1.2-4", "1.2.30.10") == -1)
assert(string.compare_version("1.2-3", "1.2.4") == -1)
assert(string.compare_version("2.2", "1.2") == 1)
assert(string.compare_version("2.2", "10.2") == -1)
assert(string.compare_version("2..2", "2.2") == 0)
assert(string.compare_version("2.2.x.3", "2.2") == 0)
assert(string.compare_version("x", "") == 0)