Zum Hauptinhalt springen

Zwei Versionsnummern vergleichen (string.compare_version)

Deklaration

Vergleichsergebnis = string.compare_version(Versionsnummer_A, Versionsnummer_B)

Parameter

  • Versionsnummer_A, Versionsnummer_B
    Text; die beiden zu vergleichenden Versionsnummern

Rückgabewert

  • Vergleichsergebnis
    Ganzzahl; 1, wenn Versionsnummer_A größer als Versionsnummer_B ist, -1, wenn sie kleiner ist, und 0 bei Gleichheit

Beschreibung

Vergleicht zwei Versionsnummern-Strings nach den folgenden Regeln:
Es werden reine Zahlenwerte verwendet, die durch Punkt ., Bindestrich - oder Leerzeichen getrennt sind.
Verschiedene Trennzeichen sind gleichwertig; mehrere direkt aufeinanderfolgende Trennzeichen gelten als ein Trennzeichen.
Das Gewicht nimmt von links nach rechts mit jedem Segment ab.
Bei jedem ungültigen Zeichen wird der Vergleich abgebrochen; der restliche Inhalt wird nicht verglichen.
Bei unterschiedlicher Segmentanzahl werden fehlende Segmente für den Vergleich mit '0' aufgefüllt.
Leere Strings oder ungültige Strings werden als Versionsnummer '0' betrachtet.
Beispielsweise sind '1.1' und '1.1.0' zwei gleiche Versionsnummern.
Beispielsweise sind '1.1' und '1.1-0' zwei gleiche Versionsnummern.
Beispielsweise sind '1.1' und '1-1' zwei gleiche Versionsnummern.
Beispielsweise ist '1.0' gleich '1 0' (zwischen 1 und 0 befindet sich ein Leerzeichen).
Beispielsweise ist '1.0' größer als '0.99999'.
Diese Funktion kann in XUI verwendet werden.

Beispiel

-- "1.5", "1.05" und "1.005" sind dieselbe Version
-- "1.5", "1.50" und "1.500" sind drei verschiedene Versionsnummern
-- "1.11" ist größer als "1.5"
-- "1.52" ist gleich "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)