Does anyone have code to compare two version numbers in JavaScript? I just want simple version comparisons (e.g. "1.0"
vs "1.5.6"
), and it should work with numbers or strings. It can ignore trailing beta identifiers like "1.5.6b4"
, but can otherwise expect the strings to be well-formed. The function should return a signed integer like a normal cmp function.
function cmpVersion(a, b)
return less than one if a < b
return 0 if a == b
return greater than one if a > b
I have an answer, but will choose a better or more elegant solution over my own.
(I am using this to compare jQuery.browser.version
numbers, but the answer will be more widely applicable)
function cmpVersion(a, b) {
var i, cmp, len;
a = (a + '').split('.');
b = (b + '').split('.');
len = Math.max(a.length, b.length);
for( i = 0; i < len; i++ ) {
if( a[i] === undefined ) {
a[i] = '0';
}
if( b[i] === undefined ) {
b[i] = '0';
}
cmp = parseInt(a[i], 10) - parseInt(b[i], 10);
if( cmp !== 0 ) {
return (cmp < 0 ? -1 : 1);
}
}
return 0;
}
function gteVersion(a, b) {
return cmpVersion(a, b) >= 0;
}
function ltVersion(a, b) {
return cmpVersion(a, b) < 0;
}
This function handles:
cmpVersion("1.0", 1)
returns 0
)alpha
, b
, pre4
, etc