如何比较任意版本号?

the*_*dow 9 javascript comparison

有没有人有代码来比较JavaScript中的两个版本号?我只想要简单的版本比较(例如"1.0"vs "1.5.6"),它应该与数字或字符串一起使用.它可以忽略尾随的beta标识符"1.5.6b4",但可以预期字符串格式正确.该函数应该返回一个有符号整数,就像普通的cmp函数一样.

function cmpVersion(a, b)
  return less than one if a < b
  return 0 if a == b
  return greater than one if a > b
Run Code Online (Sandbox Code Playgroud)

我有一个答案,但会选择一个比我自己更好或更优雅的解决方案.

(我用它来比较jQuery.browser.version数字,但答案会更广泛适用)

the*_*dow 14

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;
}
Run Code Online (Sandbox Code Playgroud)

这个函数处理:

  • 数字或字符串作为输入
  • 尾随零(例如cmpVersion("1.0", 1)返回0)
  • 忽略尾随alpha,b,pre4


Dav*_*ver 5

如果您想完全正确,请查看PEP386上的讨论,尤其是标题“新版本控制算法”。

否则,您的答案似乎很好。