字符串增加版本比较的原型方法

master
yutent 2023-06-20 17:33:35 +08:00
parent e5097d0b7b
commit 0ebe311615
2 changed files with 74 additions and 8 deletions

View File

@ -31,7 +31,12 @@
│ ├── .xss() // 字符串安全转义 │ ├── .xss() // 字符串安全转义
│ ├── .escape() // js特殊字符的转义 │ ├── .escape() // js特殊字符的转义
│ ├── .at(index) // 读取指定位置的字符, 负值则从后往前读 │ ├── .at(index) // 读取指定位置的字符, 负值则从后往前读
│ └── .toJson() // 将url参数转为对象 │ ├── .toJson() // 将url参数转为对象
│ ├── .lt(version) // 判断是否小于目标版本号
│ ├── .lte(version) // 判断是否小于或等于目标版本号
│ ├── .gt(version) // 判断是否大于目标版本号
│ ├── .gte(version) // 判断是否大于或等于目标版本号
│ └── .eq(version) // 判断是否等于目标版本号, 1.0和1.0.0这里会返回true, 而用 == 或 ===, 无法得到正确的结果
├── Number ├── Number
│ ├── .parse(str) // 将安全范围内的数字字符串转为数字类型 │ ├── .parse(str) // 将安全范围内的数字字符串转为数字类型

View File

@ -3,10 +3,38 @@
* @date 2020/09/16 12:09:15 * @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方法 //类似于Array 的splice方法
if (!String.prototype.splice) { if (!String.prototype.splice) {
Object.defineProperty(String.prototype, 'splice', { Object.defineProperty(String.prototype, 'splice', {
value: function(start, len, fill) { value: function (start, len, fill) {
let length = this.length let length = this.length
let argLen = arguments.length let argLen = arguments.length
@ -42,7 +70,7 @@ if (!String.prototype.splice) {
//同php的htmlspecialchars函数 //同php的htmlspecialchars函数
if (!String.prototype.htmlspecialchars) { if (!String.prototype.htmlspecialchars) {
Object.defineProperty(String.prototype, 'htmlspecialchars', { Object.defineProperty(String.prototype, 'htmlspecialchars', {
value: function(sign) { value: function (sign) {
let str = this.replace(/&(?!\w+;)/g, '&amp;') let str = this.replace(/&(?!\w+;)/g, '&amp;')
.replace(/</g, '&lt;') .replace(/</g, '&lt;')
.replace(/>/g, '&gt;') .replace(/>/g, '&gt;')
@ -61,7 +89,7 @@ if (!String.prototype.htmlspecialchars) {
//htmlspecialchars的还原 //htmlspecialchars的还原
if (!String.prototype.tohtml) { if (!String.prototype.tohtml) {
Object.defineProperty(String.prototype, 'tohtml', { Object.defineProperty(String.prototype, 'tohtml', {
value: function() { value: function () {
return this.replace(/&lt;/gi, '<') return this.replace(/&lt;/gi, '<')
.replace(/&gt;/gi, '>') .replace(/&gt;/gi, '>')
.replace(/&quot;/gi, '"') .replace(/&quot;/gi, '"')
@ -74,7 +102,7 @@ if (!String.prototype.tohtml) {
//简单的过滤xss //简单的过滤xss
if (!String.prototype.xss) { if (!String.prototype.xss) {
Object.defineProperty(String.prototype, 'xss', { Object.defineProperty(String.prototype, 'xss', {
value: function() { value: function () {
let str = this.htmlspecialchars('ENT_QUOTES') let str = this.htmlspecialchars('ENT_QUOTES')
str = str str = str
.replace( .replace(
@ -90,7 +118,7 @@ if (!String.prototype.xss) {
// js特殊字符的转义 // js特殊字符的转义
if (!String.prototype.escape) { if (!String.prototype.escape) {
Object.defineProperty(String.prototype, 'escape', { Object.defineProperty(String.prototype, 'escape', {
value: function() { value: function () {
return this.replace(/('|"|&|\\|\}|\{|\(|\)|;|=|\,|&)/g, '\\$1') return this.replace(/('|"|&|\\|\}|\{|\(|\)|;|=|\,|&)/g, '\\$1')
} }
}) })
@ -98,7 +126,7 @@ if (!String.prototype.escape) {
if (!String.prototype.at) { if (!String.prototype.at) {
Object.defineProperty(String.prototype, 'at', { Object.defineProperty(String.prototype, 'at', {
value: function(num) { value: function (num) {
var n = +num var n = +num
if (n < 0) { if (n < 0) {
n += this.length n += this.length
@ -115,7 +143,7 @@ if (!String.prototype.at) {
*/ */
if (!String.prototype.toJson) { if (!String.prototype.toJson) {
Object.defineProperty(String.prototype, 'toJson', { Object.defineProperty(String.prototype, 'toJson', {
value: function() { value: function () {
var str = this.replace(/^\?/, '') var str = this.replace(/^\?/, '')
var params = decodeURIComponent(str) var params = decodeURIComponent(str)
.split('&') .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
}
})
}