#版本号比较
#获取版本号中的数字
代码示例
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;
}#获取版本号中的字母
代码示例
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;
// }
}#版本号比对
代码示例
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);
}
}
}#比对结果
代码示例
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 三级版本号比较
代码示例
/* 软件版本比较 */
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;
}注意事项
传递要比较的两个版本号为 vNew 和 vOld,新版本号在前,老版本号在后,返回结果为 True 或 False。