versionCompare 版本號比較工具

簡介

需求很是簡單,須要比較軟件或app的版本號,判斷大小,形如 0.10.2形式的版本號字符串。
實現邏輯是按照點(.)分割字符串,而後逐級比較版本大小。
不存在的按0處理,空字符串小於非空字符串。javascript

測試結果

'1' = '1'html

'1' = '1.0'java

'1' = '1.0.0'git

'1.0' = '1'github

'1.0' = '1.0'app

'1.0.0' = '1.0'測試

'1.1' > '1'code

'1.1' < '1.1.1'htm

'1.1' = '1.1.0'blog

'1.1.0' = '1.1'

'0.1.2' < '0.1.2.3'

'0.1.2' < '0.1.3'

'0.1.2' < '0.2.2'

'0.1.2' < '1.1.2'

'10.20.30' = '10.20.30'

'10.20.30' < '10.20.30.0.0.0.1'

'0.10.20.30' < '10.20.30'

'1' > ''

'' < '1'

'' < '0'

'' = ''

源碼

/**
 * 對比字符串版本號的大小,返回1則v1大於v2,返回-1則v1小於v2,返回0則v1等於v2
 * 
 * @author xxcanghai@博客園
 * @param {string} v1 要進行比較的版本號1
 * @param {string} v2 要進行比較的版本號2
 * @returns
 */
function versionCompare(v1, v2) {
    var GTR = 1; //大於
    var LSS = -1; //小於
    var EQU = 0; //等於
    var v1arr = String(v1).split(".").map(function (a) {
        return parseInt(a);
    });
    var v2arr = String(v2).split(".").map(function (a) {
        return parseInt(a);
    });
    var arrLen = Math.max(v1arr.length, v2arr.length);
    var result;

    //排除錯誤調用
    if (v1 == undefined || v2 == undefined) {
        throw new Error();
    }

    //檢查空字符串,任何非空字符串都大於空字符串
    if (v1.length == 0 && v2.length == 0) {
        return EQU;
    } else if (v1.length == 0) {
        return LSS;
    } else if (v2.length == 0) {
        return GTR;
    }

    //循環比較版本號
    for (var i = 0; i < arrLen; i++) {
        result = xxcanghaiComp(v1arr[i], v2arr[i]);
        if (result == EQU) {
            continue;
        } else {
            break;
        }
    }
    return result;

    function xxcanghaiComp(n1, n2) {
        if (typeof n1 != "number") {
            n1 = 0;
        }
        if (typeof n2 != "number") {
            n2 = 0;
        }
        if (n1 > n2) {
            return GTR;
        } else if (n1 < n2) {
            return LSS;
        } else {
            return EQU;
        }
    }
}

在線測試頁面 & 源碼下載

Demo:
http://xxcanghai.github.io/cnblogsFiles/versionCompare/index.html

全部源碼下載GitHub:
https://github.com/xxcanghai/cnblogsFiles/tree/master/versionCompare

相關文章
相關標籤/搜索