JS比较软件版本号

JS比较软件版本号 版本号格式为:a.b.c

1.获取版本号中的数字

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;
}

2.获取版本号中的字母

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;
	// 	}
}

3.版本号比对

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 or False

原文地址:https://www.cnblogs.com/zxk5211/p/web_17.html