feat:提交
This commit is contained in:
118
tests/dev1/dataHandle/common/base/MaskedNumberRange.ts
Normal file
118
tests/dev1/dataHandle/common/base/MaskedNumberRange.ts
Normal file
@@ -0,0 +1,118 @@
|
||||
/** 文本表示的数字取值范围,比如 : "2,3,5-8" 表示
|
||||
* () => 大于等于 小于等于
|
||||
* [] => 大于 小于
|
||||
*/
|
||||
export class MaskedNumberRange {
|
||||
maskedNumbers: any[]
|
||||
constructor(strRs: string) {
|
||||
let rs = []
|
||||
let strs = strRs.split(',')
|
||||
for (let str of strs) {
|
||||
if (str.trim() == '')
|
||||
continue
|
||||
let n = Number(str)
|
||||
|
||||
let s_flag = 'in'
|
||||
let e_flag = 'in'
|
||||
if (!Number.isNaN(n)) {
|
||||
rs.push({ s: n, e: n, s_flag, e_flag })
|
||||
}
|
||||
else {
|
||||
let zys = str.split('-')
|
||||
if (zys.length != 2)
|
||||
continue
|
||||
if (zys[0].trim() == '' || zys[1].trim() == '')
|
||||
continue
|
||||
|
||||
|
||||
|
||||
let start :any = zys[0]
|
||||
let end :any = zys[1]
|
||||
if (zys[0].trim().includes('(')) {
|
||||
s_flag = 'notIn'
|
||||
start = start.replaceAll('(', '')
|
||||
} else if (zys[0].trim().includes('[')) {
|
||||
s_flag = 'in'
|
||||
start = start.replaceAll('[', '')
|
||||
}
|
||||
|
||||
if (start == 'x') {
|
||||
s_flag = 'infinite'
|
||||
}else{
|
||||
start = Number(start)
|
||||
}
|
||||
|
||||
if (zys[1].trim().includes(')')) {
|
||||
e_flag = 'notIn'
|
||||
end = end.replaceAll(')', '')
|
||||
} else if (zys[1].trim().includes(']')) {
|
||||
e_flag = 'in'
|
||||
end = end.replaceAll(']', '')
|
||||
}
|
||||
|
||||
if (end == 'x') {
|
||||
e_flag = 'infinite'
|
||||
}else{
|
||||
end = Number(end)
|
||||
}
|
||||
|
||||
|
||||
|
||||
let s = start // Number(zys[0])
|
||||
let e = end //Number(zys[1])
|
||||
|
||||
|
||||
|
||||
rs.push({ s: s, e: e, s_flag, e_flag })
|
||||
}
|
||||
}
|
||||
this.maskedNumbers = rs
|
||||
}
|
||||
|
||||
/** 参数是否在给定范围内 */
|
||||
isInRange(r: number): boolean {
|
||||
let res = false
|
||||
|
||||
for (let se of this.maskedNumbers) {
|
||||
|
||||
if (se.s_flag == 'infinite') {
|
||||
// 无穷 不判断
|
||||
res = true
|
||||
} else if (se.s_flag == 'notIn') {
|
||||
if (r > se.s) {
|
||||
res = true
|
||||
}
|
||||
} else if (se.s_flag == 'in') {
|
||||
if (r >= se.s) {
|
||||
res = true
|
||||
}
|
||||
}
|
||||
|
||||
if (res == true) {
|
||||
let res1 = false
|
||||
|
||||
if (se.e_flag == 'infinite') {
|
||||
res1 = true
|
||||
} else if (se.e_flag == 'notIn') {
|
||||
if (r < se.e) {
|
||||
res1 = true
|
||||
}
|
||||
} else if (se.e_flag == 'in') {
|
||||
if (r <= se.e) {
|
||||
res1 = true
|
||||
}
|
||||
}
|
||||
|
||||
res = res && res1
|
||||
}
|
||||
|
||||
if(res == true){
|
||||
return true
|
||||
}
|
||||
|
||||
// if (r > se.s && r < se.e)
|
||||
// return true
|
||||
}
|
||||
return res
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user