时空网前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

76 lines
2.3 KiB

4 years ago
  1. export function formatValueByGapRule(gapRule, value, gap = ' ', range, isAdd = 1) {
  2. const arr = value ? value.split('') : []
  3. let showValue = ''
  4. const rule = []
  5. gapRule.split('|').some((n, j) => {
  6. rule[j] = +n + (rule[j - 1] ? +rule[j - 1] : 0)
  7. })
  8. let j = 0
  9. arr.some((n, i) => {
  10. // Remove the excess part
  11. if (i > rule[rule.length - 1] - 1) {
  12. return
  13. }
  14. if (i > 0 && i === rule[j]) {
  15. showValue = showValue + gap + n
  16. j++
  17. } else {
  18. showValue = showValue + '' + n
  19. }
  20. })
  21. let adapt = 0
  22. rule.some((n, j) => {
  23. if (range === +n + 1 + j) {
  24. adapt = 1 * isAdd
  25. }
  26. })
  27. range = typeof range !== 'undefined' ? (range === 0 ? 0 : range + adapt) : showValue.length
  28. return {value: showValue, range: range}
  29. }
  30. export function formatValueByGapStep(step, value, gap = ' ', direction = 'right', range, isAdd = 1, oldValue = '') {
  31. if (value.length === 0) {
  32. return {value, range}
  33. }
  34. const arr = value && value.split('')
  35. let _range = range
  36. let showValue = ''
  37. if (direction === 'right') {
  38. for (let j = arr.length - 1, k = 0; j >= 0; j--, k++) {
  39. const m = arr[j]
  40. showValue = k > 0 && k % step === 0 ? m + gap + showValue : m + '' + showValue
  41. }
  42. if (isAdd === 1) {
  43. // 在添加的情况下,如果添加前字符串的长度减去新的字符串的长度为2,说明多了一个间隔符,需要调整range
  44. if (oldValue.length - showValue.length === -2) {
  45. _range = range + 1
  46. }
  47. } else {
  48. // 在删除情况下,如果删除前字符串的长度减去新的字符串的长度为2,说明少了一个间隔符,需要调整range
  49. if (oldValue.length - showValue.length === 2) {
  50. _range = range - 1
  51. }
  52. // 删除到最开始,range 保持 0
  53. if (_range <= 0) {
  54. _range = 0
  55. }
  56. }
  57. } else {
  58. arr.some((n, i) => {
  59. showValue = i > 0 && i % step === 0 ? showValue + gap + n : showValue + '' + n
  60. })
  61. const adapt = range % (step + 1) === 0 ? 1 * isAdd : 0
  62. _range = typeof range !== 'undefined' ? (range === 0 ? 0 : range + adapt) : showValue.length
  63. }
  64. return {value: showValue, range: _range}
  65. }
  66. export function trimValue(value, gap = ' ') {
  67. value = typeof value === 'undefined' ? '' : value
  68. const reg = new RegExp(gap, 'g')
  69. value = value.toString().replace(reg, '')
  70. return value
  71. }