Skip to content

Instantly share code, notes, and snippets.

@nikitaeverywhere
Created June 28, 2016 11:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nikitaeverywhere/7f79837f3d46dd9cc70a9ffe68e416b8 to your computer and use it in GitHub Desktop.
Save nikitaeverywhere/7f79837f3d46dd9cc70a9ffe68e416b8 to your computer and use it in GitHub Desktop.
JavaScript: compare semantic versions
/**
* Semantic versioning versions compare.
* @param {string} high
* @param {string} low
* @returns {boolean}
* @author ZitRo (zitros.lab@gmail.com)
* @license MIT http://www.opensource.org/licenses/mit-license.php
*/
function versionGT (high, low) {
let v1 = high.split(/[\-\.]/g),
v2 = low.split(/[\-\.]/g);
for (let i = 0; i < v1.length; i++) {
if (isNaN(+v1[i]) || isNaN(+v2[i])) {
if (v1[i] > v2[i])
return true;
else if (v1[i] < v2[i])
return false;
} else {
if (+v1[i] > +v2[i])
return true;
else if (+v1[i] < +v2[i])
return false;
}
}
return v2.length > v1.length;
}
// TEST cases:
// versionGT("1.0.4", "2.0.0") === false
// versionGT("2.0.4", "2.0.0") === true
// versionGT("2.1.0", "2.0.6") === true
// versionGT("2.0.0", "2.0.0-alpha.1") === true
// versionGT("2.0.0-beta.1", "2.0.0-alpha.1") === true
// versionGT("2.0.0-alpha.16", "2.0.0-beta.20") === false
// versionGT("2.0.0", "2.0.0-beta.20") === true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment