const v1 = "1.2.3a"
const v2 = "1.2.3c"
var result
const compareVersion = (a, b) => {
let arr1 = a.split(".")
let arr2 = b.split(".")
// 先比较第一位 Number()遇到无法解析的会返回NaN,所以用parseInt。
// Number.parseInt(arr1[0])和Number.parseInt(arr2[0])
compare(Number.parseInt(arr1[0]), Number.parseInt(arr2[0]))
// 比较第二位
// Number.parseInt(arr1[1])和Number.parseInt(arr2[1])
if (result === "v1=v2") {
compare(Number.parseInt(arr1[1]), Number.parseInt(arr2[1]))
}
// 前两位完全相同比较第三位
if (!result == "v1=v2") {
return
}
if (Number(arr1[2]) && Number(arr2[2])) {
// 全数字。直接比较
compare(Number(arr1[2]), Number(arr2[2]))
} else if (result === "v1=v2" && Number.isNaN(Number.parseInt(arr1[2])) && Number.isNaN(Number.parseInt(arr2[2]))) {
// 全字母,比较Unicode 编码
compare(arr1[2].charCodeAt(), arr2[2].charCodeAt())
} else if (result === "v1=v2" && check(arr1[2]) && check(arr2[2])) {
// 数字+字母
let num1 = Number.parseInt(arr1[2]);
let num2 = Number.parseInt(arr2[2]);
let word1 = arr1[2].split(num1)[1];
let word2 = arr2[2].split(num2)[1];
compare(num1, num2)
result === "v1=v2" ? compare(word1.charCodeAt(), word2.charCodeAt()) : ""
}
console.log(result)
}
// 检测数字字母组合
var check = (i) => {
var re = /^[0-9a-zA-Z]*$/g
if (re.test(i)) {
return true
}
return false
}
// 比较大小
var compare = (a, b) => {
if (a > b) {
result = "v1>v2"
return
} else if (a < b) {
result = "v1<v2"
return
} else {
result = "v1=v2"
return
}
}
compareVersion(v1, v2)
网友评论