From 0ebe31161577fb36bb3f5b83665e283afb5e93c1 Mon Sep 17 00:00:00 2001 From: yutent Date: Tue, 20 Jun 2023 17:33:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AD=97=E7=AC=A6=E4=B8=B2=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E6=AF=94=E8=BE=83=E7=9A=84=E5=8E=9F=E5=9E=8B?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Readme.md | 7 ++++- src/lib/string.js | 75 ++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 74 insertions(+), 8 deletions(-) diff --git a/Readme.md b/Readme.md index 7f34420..d660207 100644 --- a/Readme.md +++ b/Readme.md @@ -31,7 +31,12 @@ │ ├── .xss() // 字符串安全转义 │ ├── .escape() // js特殊字符的转义 │ ├── .at(index) // 读取指定位置的字符, 负值则从后往前读 -│ └── .toJson() // 将url参数转为对象 +│ ├── .toJson() // 将url参数转为对象 +│ ├── .lt(version) // 判断是否小于目标版本号 +│ ├── .lte(version) // 判断是否小于或等于目标版本号 +│ ├── .gt(version) // 判断是否大于目标版本号 +│ ├── .gte(version) // 判断是否大于或等于目标版本号 +│ └── .eq(version) // 判断是否等于目标版本号, 1.0和1.0.0这里会返回true, 而用 == 或 ===, 无法得到正确的结果 │ ├── Number │ ├── .parse(str) // 将安全范围内的数字字符串转为数字类型 diff --git a/src/lib/string.js b/src/lib/string.js index 39f2516..edd0c34 100644 --- a/src/lib/string.js +++ b/src/lib/string.js @@ -3,10 +3,38 @@ * @date 2020/09/16 12:09:15 */ +// 版本号比较, 返回 -1, 0, 1 +function compare(v1, v2) { + v1 += '' + v2 += '' + + if (v1 === v2) { + return 0 + } else { + v1 = v1.split('.') + v2 = v2.split('.') + + let max = Math.max(v1.length, v2.length) + + for (let i = 0; i < max; i++) { + let _1 = +v1[i] || 0, + _2 = +v2[i] || 0 + + if (_1 > _2) { + return 1 + } else if (_1 < _2) { + return -1 + } + } + + return 0 + } +} + //类似于Array 的splice方法 if (!String.prototype.splice) { Object.defineProperty(String.prototype, 'splice', { - value: function(start, len, fill) { + value: function (start, len, fill) { let length = this.length let argLen = arguments.length @@ -42,7 +70,7 @@ if (!String.prototype.splice) { //同php的htmlspecialchars函数 if (!String.prototype.htmlspecialchars) { Object.defineProperty(String.prototype, 'htmlspecialchars', { - value: function(sign) { + value: function (sign) { let str = this.replace(/&(?!\w+;)/g, '&') .replace(//g, '>') @@ -61,7 +89,7 @@ if (!String.prototype.htmlspecialchars) { //htmlspecialchars的还原 if (!String.prototype.tohtml) { Object.defineProperty(String.prototype, 'tohtml', { - value: function() { + value: function () { return this.replace(/</gi, '<') .replace(/>/gi, '>') .replace(/"/gi, '"') @@ -74,7 +102,7 @@ if (!String.prototype.tohtml) { //简单的过滤xss if (!String.prototype.xss) { Object.defineProperty(String.prototype, 'xss', { - value: function() { + value: function () { let str = this.htmlspecialchars('ENT_QUOTES') str = str .replace( @@ -90,7 +118,7 @@ if (!String.prototype.xss) { // js特殊字符的转义 if (!String.prototype.escape) { Object.defineProperty(String.prototype, 'escape', { - value: function() { + value: function () { return this.replace(/('|"|&|\\|\}|\{|\(|\)|;|=|\,|&)/g, '\\$1') } }) @@ -98,7 +126,7 @@ if (!String.prototype.escape) { if (!String.prototype.at) { Object.defineProperty(String.prototype, 'at', { - value: function(num) { + value: function (num) { var n = +num if (n < 0) { n += this.length @@ -115,7 +143,7 @@ if (!String.prototype.at) { */ if (!String.prototype.toJson) { Object.defineProperty(String.prototype, 'toJson', { - value: function() { + value: function () { var str = this.replace(/^\?/, '') var params = decodeURIComponent(str) .split('&') @@ -129,3 +157,36 @@ if (!String.prototype.toJson) { } }) } + +// 用于版本号的比较 +if (!String.prototype.lt) { + Object.defineProperty(String.prototype, 'lt', { + value: function (v) { + return compare(this, v) === -1 + } + }) + + Object.defineProperty(String.prototype, 'lte', { + value: function (v) { + return compare(this, v) < 1 + } + }) + + Object.defineProperty(String.prototype, 'gt', { + value: function (v) { + return compare(this, v) === 1 + } + }) + + Object.defineProperty(String.prototype, 'gte', { + value: function (v) { + return compare(this, v) > -1 + } + }) + + Object.defineProperty(String.prototype, 'eq', { + value: function (v) { + return compare(this, v) === 0 + } + }) +}