Version string comparer
Compare version strings
by bladnman
HTML
<script src="https://raw.github.com/carhartl/jquery-cookie/master/jquery.cookie.js"></script>
<script src="http://qubedpeas.com/files/currentVersion/QPTools.js"></script>
<div id="log" class="log"></div>
CSS
.runButton {
width: 125px;
margin: 20px;
}
.log {
padding:10px;
margin: 20px;
border: 1px dotted #ccc;
color:#888;
font-face: arial;
font-size:12px;
background: #fbfbfb;
}
JavaScript
/* ************************************ */
function runTest() {
log("----------- [ LESS ] -------------");
test("1", "2");
test("1.0", "2.0");
test("1.00", "2.00");
test("1.00.0", "2.00.0");
test("1.00.0", "2");
test("1.1", "1.1.0.0.1");
log("----------- [ MORE ] -------------");
test("11", "2");
test("11.0", "2.0");
test("11.00", "2.00");
test("11.00.0", "2.00.0");
test("11.00.0", "2");
test("1.1.0.1.0", "1.1.0.0.1");
log("----------- [ EQUAL ] -------------");
test("1", "1");
test("1.1", "1.1");
test("1.1.0.1.0", "1.1.0.1.0");
log("----------- [ ODD ITEMS ] -------------");
test(null, null);
test("1a", "1b");
test("1a.0.1", "1b.0.1");
test("1a.0.2", "1b.0.1");
test("1a.0.2");
}
function test(v1, v2) {
// same
if (isVersionEqualTo(v1, v2)) {
log(v1 + " = " + v2);
}
// less
else if (isVersionLessThan(v1, v2)) {
log(v1 + " < " + v2);
}
// more
else if (isVersionGreaterThan(v1, v2)) {
log(v1 + " > " + v2);
}
}
runTest();
function isVersionGreaterThan(v1, v2) {
return compareVersions (v1, v2, "==") == -1;
}
function isVersionLessThan(v1, v2) {
return compareVersions (v1, v2, "==") == 1;
}
function isVersionEqualTo(v1, v2) {
return compareVersions (v1, v2, "==") == 0;
}
function compareVersions(v1, v2) {
v1 = QPU.getStringValue(v1);
v2 = QPU.getStringValue(v2);
var v1parts = v1.split('.'),
v2parts = v2.split('.');
var maxLen = Math.max(v1parts.length, v2parts.length);
var part1, part2;
for(var i = 0; i < maxLen; i++) {
part1 = QPU.getIntValue(v1parts[i]);
part2 = QPU.getIntValue(v2parts[i]);
if (part1 < part2) {
return 1;
}
else if (part1 > part2) {
return -1;
}
}
return 0;
}
/*...