77 lines
2.3 KiB
JavaScript
77 lines
2.3 KiB
JavaScript
export function formatValueByGapRule(gapRule, value, gap = ' ', range, isAdd = 1) {
|
||
const arr = value ? value.split('') : []
|
||
let showValue = ''
|
||
const rule = []
|
||
gapRule.split('|').some((n, j) => {
|
||
rule[j] = +n + (rule[j - 1] ? +rule[j - 1] : 0)
|
||
})
|
||
let j = 0
|
||
arr.some((n, i) => {
|
||
// Remove the excess part
|
||
if (i > rule[rule.length - 1] - 1) {
|
||
return
|
||
}
|
||
if (i > 0 && i === rule[j]) {
|
||
showValue = showValue + gap + n
|
||
j++
|
||
} else {
|
||
showValue = showValue + '' + n
|
||
}
|
||
})
|
||
let adapt = 0
|
||
rule.some((n, j) => {
|
||
if (range === +n + 1 + j) {
|
||
adapt = 1 * isAdd
|
||
}
|
||
})
|
||
range = typeof range !== 'undefined' ? (range === 0 ? 0 : range + adapt) : showValue.length
|
||
return {value: showValue, range: range}
|
||
}
|
||
|
||
export function formatValueByGapStep(step, value, gap = ' ', direction = 'right', range, isAdd = 1, oldValue = '') {
|
||
if (value.length === 0) {
|
||
return {value, range}
|
||
}
|
||
|
||
const arr = value && value.split('')
|
||
let _range = range
|
||
let showValue = ''
|
||
|
||
if (direction === 'right') {
|
||
for (let j = arr.length - 1, k = 0; j >= 0; j--, k++) {
|
||
const m = arr[j]
|
||
showValue = k > 0 && k % step === 0 ? m + gap + showValue : m + '' + showValue
|
||
}
|
||
if (isAdd === 1) {
|
||
// 在添加的情况下,如果添加前字符串的长度减去新的字符串的长度为2,说明多了一个间隔符,需要调整range
|
||
if (oldValue.length - showValue.length === -2) {
|
||
_range = range + 1
|
||
}
|
||
} else {
|
||
// 在删除情况下,如果删除前字符串的长度减去新的字符串的长度为2,说明少了一个间隔符,需要调整range
|
||
if (oldValue.length - showValue.length === 2) {
|
||
_range = range - 1
|
||
}
|
||
// 删除到最开始,range 保持 0
|
||
if (_range <= 0) {
|
||
_range = 0
|
||
}
|
||
}
|
||
} else {
|
||
arr.some((n, i) => {
|
||
showValue = i > 0 && i % step === 0 ? showValue + gap + n : showValue + '' + n
|
||
})
|
||
const adapt = range % (step + 1) === 0 ? 1 * isAdd : 0
|
||
_range = typeof range !== 'undefined' ? (range === 0 ? 0 : range + adapt) : showValue.length
|
||
}
|
||
|
||
return {value: showValue, range: _range}
|
||
}
|
||
|
||
export function trimValue(value, gap = ' ') {
|
||
value = typeof value === 'undefined' ? '' : value
|
||
const reg = new RegExp(gap, 'g')
|
||
value = value.toString().replace(reg, '')
|
||
return value
|
||
}
|