金沙网址0.十.二花样的版本号字符串

简介

需求非常简单,需要比较软件或app的版本号,判断大小,形如
0.10.2形式的版本号字符串。
实现逻辑是按照点(.)分割字符串,然后逐级比较版本大小。
不存在的按0处理,空字符串小于非空字符串。

测试结果

金沙网址,’1′ = ‘1’

‘1’ = ‘1.0’

‘1’ = ‘1.0.0’

‘1.0’ = ‘1’

‘1.0’ = ‘1.0’

‘1.0.0’ = ‘1.0’

‘1.1’ > ‘1’

‘1.1’ < ‘1.1.1’

‘1.1’ = ‘1.1.0’

‘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:

所有源码下载GitHub:

相关文章