> For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.

# 版本号比较

## 获取版本号中的数字

```javascript title="代码示例"
function toNumber(n) {
    // 使用正则表达式，截取字符串为数组，字符串中包含非数值型，如字母，则数组元素中会出现空值
    var n = n.toString(),
        n_arr = n.split(/\D/);
    if (n_arr[n_arr.length - 1] == "") {
        n_arr.pop();
    }

    var n_replace = ["", "0", "00", "000", "0000"],
        r_n_replace = n_replace.reverse();

    for (var i = 0; i < n_arr.length; i++) {
        var l = n_arr[i].length;
        n_arr[i] = r_n_replace[l] + n_arr[i];
    }

    var res = n_arr.join("");
    return res;
}
```

## 获取版本号中的字母

```javascript title="代码示例"
function toString(s) {
    var s = s.toString(),
        // 截取字符串中的字母成为数组元素
        reg = s.match(/[a-zA-Z]/g);

    return reg != null ? reg : null;
    /* 被替换 */
    // 	if (reg != null) {
    // 		return reg;
    // 	} else {
    // 		return null;
    // 	}
}
```

## 版本号比对

```javascript title="代码示例"
function changeVersion(a, b) {
    var a1 = toNumber(a),
        a2 = toString(a),
        b1 = toNumber(b),
        b2 = toString(b);

    if (a1 < b1) {
        console.log("最新版本号为：" + b);
    } else if (a1 > b1) {
        console.log("最新版本号为：" + a);
    } else if (a1 === b1) {
        // 版本号相同时，对比字母，将其转为16进制数，进行比对
        var a2_str = a2[0].toString(16),
            b2_str = b2[0].toString(16);
        if (a2_str < b2_str) {
            console.log("最新版本号为：" + b);
        } else if (a2_str > b2_str) {
            console.log("最新版本号为：" + a);
        } else if (a2_str === b2_str) {
            console.log("两版本号相同！最新版本号为：" + a);
        }
    }
}
```

## 比对结果

```javascript title="代码示例"
let a = "1.2.3a",
    b = "1.2.2c";
changeVersion(a, b); // 最新版本号为：1.2.3a

let v_n = "1.2.4",
    v_o = "1.1.1c";
changeVersion(v_n, v_o); // 最新版本号为：1.2.4
```

## 纯数字 1.2.3 三级版本号比较

```javascript title="代码示例"
/* 软件版本比较 */
function versionAnswer(vNew, vOld) {
    if (vNew == "" || vNew == null || vNew == undefined) {
        return false;
    } else {
        var vn = vNew.replace(/(^\s+)|(\s+$)/gi, "");
    }
    var vo = vOld.replace(/(^\s+)|(\s+$)/gi, "");

    if (!vn || !vo) return true;

    var reg = /\d(\.|\d)*\d/gi;
    vn = vn.match(reg)[0];
    vo = vo.match(reg)[0];

    var vnArr = vn.split(".");
    var voArr = vo.split(".");
    // 版本比较 1.1.1类型
    if (vnArr[0] > voArr[0]) {
        return true;
    } else if (vnArr[0] == voArr[0]) {
        if (vnArr[1] > voArr[1]) {
            return true;
        } else if (vnArr[1] == voArr[1]) {
            if (vnArr[2] > voArr[2]) {
                return true;
            } else if (vnArr[2] == voArr[2]) {
                return false;
            }
        }
    }
    return false;
}
```

:::tip 注意事项
传递要比较的两个版本号为 vNew 和 vOld，新版本号在前，老版本号在后，返回结果为 True 或 False。
:::
