JS 比较软件版本号

预计阅读时间: 小于 1 分钟

获取版本号中的数字

代码示例
1function toNumber(n) {
2	// 使用正则表达式,截取字符串为数组,字符串中包含非数值型,如字母,则数组元素中会出现空值
3	var n = n.toString(),
4		n_arr = n.split(/\D/);
5	if (n_arr[n_arr.length - 1] == "") {
6		n_arr.pop();
7	}
8
9	var n_replace = ["", "0", "00", "000", "0000"],
10		r_n_replace = n_replace.reverse();
11
12	for (var i = 0; i < n_arr.length; i++) {
13		var l = n_arr[i].length;
14		n_arr[i] = r_n_replace[l] + n_arr[i];
15	}
16
17	var res = n_arr.join("");
18	return res;
19}

获取版本号中的字母

代码示例
1function toString(s) {
2	var s = s.toString(),
3		// 截取字符串中的字母成为数组元素
4		reg = s.match(/[a-zA-Z]/g);
5
6	return reg != null ? reg : null;
7	/* 被替换 */
8	// 	if (reg != null) {
9	// 		return reg;
10	// 	} else {
11	// 		return null;
12	// 	}
13}

版本号比对

代码示例
1function changeVersion(a, b) {
2	var a1 = toNumber(a),
3		a2 = toString(a),
4		b1 = toNumber(b),
5		b2 = toString(b);
6
7	if (a1 < b1) {
8		console.log("最新版本号为:" + b);
9	} else if (a1 > b1) {
10		console.log("最新版本号为:" + a);
11	} else if (a1 === b1) {
12		// 版本号相同时,对比字母,将其转为16进制数,进行比对
13		var a2_str = a2[0].toString(16),
14			b2_str = b2[0].toString(16);
15		if (a2_str < b2_str) {
16			console.log("最新版本号为:" + b);
17		} else if (a2_str > b2_str) {
18			console.log("最新版本号为:" + a);
19		} else if (a2_str === b2_str) {
20			console.log("两版本号相同!最新版本号为:" + a);
21		}
22	}
23}

比对结果

代码示例
1let a = "1.2.3a",
2	b = "1.2.2c";
3changeVersion(a, b); // 最新版本号为:1.2.3a
4
5let v_n = "1.2.4",
6	v_o = "1.1.1c";
7changeVersion(v_n, v_o); // 最新版本号为:1.2.4

纯数字 1.2.3 三级版本号比较

代码示例
1/* 软件版本比较 */
2function versionAnswer(vNew, vOld) {
3	if (vNew == "" || vNew == null || vNew == undefined) {
4		return false;
5	} else {
6		var vn = vNew.replace(/(^\s+)|(\s+$)/gi, "");
7	}
8	var vo = vOld.replace(/(^\s+)|(\s+$)/gi, "");
9
10	if (!vn || !vo) return true;
11
12	var reg = /\d(\.|\d)*\d/gi;
13	vn = vn.match(reg)[0];
14	vo = vo.match(reg)[0];
15
16	var vnArr = vn.split(".");
17	var voArr = vo.split(".");
18	// 版本比较 1.1.1类型
19	if (vnArr[0] > voArr[0]) {
20		return true;
21	} else if (vnArr[0] == voArr[0]) {
22		if (vnArr[1] > voArr[1]) {
23			return true;
24		} else if (vnArr[1] == voArr[1]) {
25			if (vnArr[2] > voArr[2]) {
26				return true;
27			} else if (vnArr[2] == voArr[2]) {
28				return false;
29			}
30		}
31	}
32	return false;
33}
注意事项:

  传递要比较的两个版本号为 vNew 和 vOld,新版本号在前,老版本号在后,返回结果为 True 或 False。