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)