util-helpers 4.13.1 → 4.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -6
- package/dist/util-helpers.js +935 -536
- package/dist/util-helpers.js.map +1 -1
- package/dist/util-helpers.min.js +1 -1
- package/dist/util-helpers.min.js.map +1 -1
- package/esm/blobToDataURL.js +2 -4
- package/esm/bytesToSize.js +13 -5
- package/esm/calculateCursorPosition.js +7 -12
- package/esm/dataURLToBlob.js +2 -5
- package/esm/divide.js +9 -13
- package/esm/findTreeNode.js +66 -0
- package/esm/findTreeSelect.js +80 -0
- package/esm/formatBankCard.js +11 -11
- package/esm/formatMobile.js +11 -14
- package/esm/formatMoney.js +24 -35
- package/esm/index.js +9 -4
- package/esm/isBankCard.js +9 -13
- package/esm/isBusinessLicense.js +19 -20
- package/esm/isChinese.js +6 -6
- package/esm/isEmail.js +3 -3
- package/esm/isHMCard.js +3 -3
- package/esm/isIPv4.js +3 -3
- package/esm/isIPv6.js +3 -3
- package/esm/isIdCard.js +9 -17
- package/esm/isMobile.js +3 -3
- package/esm/isPassport.js +3 -3
- package/esm/isPassword.js +6 -7
- package/esm/isPostcode.js +3 -3
- package/esm/isPromiseLike.js +0 -2
- package/esm/isQQ.js +3 -3
- package/esm/isSocialCreditCode.js +29 -28
- package/esm/isSwiftCode.js +1 -2
- package/esm/isTWCard.js +6 -7
- package/esm/isTelephone.js +3 -3
- package/esm/isUrl.js +7 -3
- package/esm/isVehicle.js +3 -3
- package/esm/isWX.js +3 -3
- package/esm/listToTree.js +122 -0
- package/esm/minus.js +7 -11
- package/esm/normalizeString.js +1 -3
- package/esm/numberToChinese.js +43 -52
- package/esm/padZero.js +1 -5
- package/esm/parseIdCard.js +27 -23
- package/esm/plus.js +7 -11
- package/esm/randomString.js +2 -8
- package/esm/replaceChar.js +11 -16
- package/esm/round.js +4 -5
- package/esm/safeDate.js +5 -7
- package/esm/setDataURLPrefix.js +0 -1
- package/esm/strlen.js +1 -5
- package/esm/times.js +7 -11
- package/esm/transformFieldNames.doc.js +34 -0
- package/esm/transformFieldNames.js +98 -0
- package/esm/transformFieldNames.type.js +19 -0
- package/esm/treeToList.js +88 -0
- package/esm/utils/config.js +4 -4
- package/esm/utils/constants.js +2 -2
- package/esm/utils/convertToString.js +1 -2
- package/esm/utils/devWarn.js +1 -3
- package/esm/utils/math.util.js +20 -29
- package/esm/utils/type/index.js +1 -1
- package/esm/utils/type/isArguments.js +1 -2
- package/esm/utils/type/isArray.js +1 -2
- package/esm/utils/type/isBoolean.js +1 -2
- package/esm/utils/type/isDate.js +1 -2
- package/esm/utils/type/isError.js +1 -2
- package/esm/utils/type/isFunction.js +1 -2
- package/esm/utils/type/isMap.js +1 -2
- package/esm/utils/type/isNaN.js +1 -2
- package/esm/utils/type/isNil.js +1 -2
- package/esm/utils/type/isNull.js +0 -1
- package/esm/utils/type/isNumber.js +1 -2
- package/esm/utils/type/isObject.js +0 -3
- package/esm/utils/type/isRegExp.js +1 -2
- package/esm/utils/type/isSet.js +1 -2
- package/esm/utils/type/isString.js +1 -2
- package/esm/utils/type/isSymbol.js +1 -2
- package/esm/utils/type/isType.js +1 -2
- package/esm/utils/type/isUndefined.js +0 -1
- package/esm/utils/type/isWeakMap.js +1 -2
- package/esm/utils/type/isWeakSet.js +1 -2
- package/esm/validatePassword.js +27 -50
- package/esm/waitTime.js +0 -1
- package/lib/blobToDataURL.js +2 -5
- package/lib/bytesToSize.js +13 -6
- package/lib/calculateCursorPosition.js +4 -13
- package/lib/dataURLToBlob.js +2 -6
- package/lib/divide.js +8 -22
- package/lib/findTreeNode.js +76 -0
- package/lib/findTreeSelect.js +86 -0
- package/lib/formatBankCard.js +10 -13
- package/lib/formatMobile.js +10 -16
- package/lib/formatMoney.js +25 -47
- package/lib/index.js +115 -126
- package/lib/isBankCard.js +7 -15
- package/lib/isBusinessLicense.js +17 -22
- package/lib/isChinese.js +6 -9
- package/lib/isEmail.js +1 -5
- package/lib/isHMCard.js +1 -5
- package/lib/isIPv4.js +1 -5
- package/lib/isIPv6.js +1 -5
- package/lib/isIdCard.js +7 -19
- package/lib/isMobile.js +1 -5
- package/lib/isPassport.js +1 -5
- package/lib/isPassword.js +5 -9
- package/lib/isPostcode.js +1 -5
- package/lib/isPromiseLike.js +1 -4
- package/lib/isQQ.js +1 -5
- package/lib/isSocialCreditCode.js +27 -30
- package/lib/isSwiftCode.js +1 -5
- package/lib/isTWCard.js +4 -9
- package/lib/isTelephone.js +1 -5
- package/lib/isUrl.js +5 -5
- package/lib/isVehicle.js +1 -5
- package/lib/isWX.js +1 -5
- package/lib/listToTree.js +131 -0
- package/lib/minus.js +6 -20
- package/lib/normalizeString.js +0 -6
- package/lib/numberToChinese.js +41 -55
- package/lib/padZero.js +0 -7
- package/lib/parseIdCard.js +30 -29
- package/lib/plus.js +6 -20
- package/lib/randomString.js +2 -8
- package/lib/replaceChar.js +10 -18
- package/lib/round.js +3 -9
- package/lib/safeDate.js +4 -13
- package/lib/setDataURLPrefix.js +0 -2
- package/lib/strlen.js +0 -7
- package/lib/times.js +6 -18
- package/lib/transformFieldNames.doc.js +41 -0
- package/lib/transformFieldNames.js +104 -0
- package/lib/transformFieldNames.type.js +5 -0
- package/lib/treeToList.js +96 -0
- package/lib/utils/config.js +6 -6
- package/lib/utils/constants.js +2 -2
- package/lib/utils/convertToString.js +0 -4
- package/lib/utils/devWarn.js +0 -4
- package/lib/utils/math.util.js +23 -45
- package/lib/utils/type/index.js +20 -39
- package/lib/utils/type/isArguments.js +0 -4
- package/lib/utils/type/isArray.js +0 -4
- package/lib/utils/type/isBoolean.js +0 -4
- package/lib/utils/type/isDate.js +0 -4
- package/lib/utils/type/isError.js +0 -4
- package/lib/utils/type/isFunction.js +0 -4
- package/lib/utils/type/isMap.js +0 -4
- package/lib/utils/type/isNaN.js +0 -4
- package/lib/utils/type/isNil.js +0 -5
- package/lib/utils/type/isNull.js +0 -2
- package/lib/utils/type/isNumber.js +0 -4
- package/lib/utils/type/isObject.js +1 -5
- package/lib/utils/type/isRegExp.js +0 -4
- package/lib/utils/type/isSet.js +0 -4
- package/lib/utils/type/isString.js +0 -4
- package/lib/utils/type/isSymbol.js +0 -4
- package/lib/utils/type/isType.js +1 -2
- package/lib/utils/type/isUndefined.js +0 -2
- package/lib/utils/type/isWeakMap.js +0 -4
- package/lib/utils/type/isWeakSet.js +0 -4
- package/lib/validatePassword.js +27 -53
- package/lib/waitTime.js +0 -2
- package/package.json +6 -5
- package/types/bytesToSize.d.ts +9 -1
- package/types/findTreeNode.d.ts +26 -0
- package/types/findTreeSelect.d.ts +26 -0
- package/types/formatBankCard.d.ts +3 -3
- package/types/formatMobile.d.ts +4 -4
- package/types/index.d.ts +5 -0
- package/types/isIdCard.d.ts +2 -0
- package/types/isUrl.d.ts +2 -0
- package/types/listToTree.d.ts +41 -0
- package/types/transformFieldNames.d.ts +34 -0
- package/types/transformFieldNames.type.d.ts +2 -0
- package/types/treeToList.d.ts +20 -0
package/esm/validatePassword.js
CHANGED
|
@@ -3,6 +3,7 @@ var regNumber = /[\d]/;
|
|
|
3
3
|
var regLowerCaseLetter = /[a-z]/;
|
|
4
4
|
var regUpperCaseLetter = /[A-Z]/;
|
|
5
5
|
var regAllNumberAndLetter = /[\d|a-z]/gi;
|
|
6
|
+
|
|
6
7
|
/**
|
|
7
8
|
* 是否包含数字
|
|
8
9
|
*
|
|
@@ -10,10 +11,10 @@ var regAllNumberAndLetter = /[\d|a-z]/gi;
|
|
|
10
11
|
* @param {string} val 检查的值
|
|
11
12
|
* @returns {boolean} 是否包含数字
|
|
12
13
|
*/
|
|
13
|
-
|
|
14
14
|
function hasNumber(val) {
|
|
15
15
|
return regNumber.test(val);
|
|
16
16
|
}
|
|
17
|
+
|
|
17
18
|
/**
|
|
18
19
|
* 是否包含小写字母
|
|
19
20
|
*
|
|
@@ -21,11 +22,10 @@ function hasNumber(val) {
|
|
|
21
22
|
* @param {string} val 检测的值
|
|
22
23
|
* @returns {boolean} 是否包含小写字母
|
|
23
24
|
*/
|
|
24
|
-
|
|
25
|
-
|
|
26
25
|
function hasLowerCaseLetter(val) {
|
|
27
26
|
return regLowerCaseLetter.test(val);
|
|
28
27
|
}
|
|
28
|
+
|
|
29
29
|
/**
|
|
30
30
|
* 是否包含大写字母
|
|
31
31
|
*
|
|
@@ -33,11 +33,10 @@ function hasLowerCaseLetter(val) {
|
|
|
33
33
|
* @param {string} val 检测的值
|
|
34
34
|
* @returns {boolean} 是否包含大写字母
|
|
35
35
|
*/
|
|
36
|
-
|
|
37
|
-
|
|
38
36
|
function hasUpperCaseLetter(val) {
|
|
39
37
|
return regUpperCaseLetter.test(val);
|
|
40
38
|
}
|
|
39
|
+
|
|
41
40
|
/**
|
|
42
41
|
* 是否为十六进制
|
|
43
42
|
*
|
|
@@ -45,11 +44,10 @@ function hasUpperCaseLetter(val) {
|
|
|
45
44
|
* @param {string} val 检测的值
|
|
46
45
|
* @returns {boolean} 是否为十六进制
|
|
47
46
|
*/
|
|
48
|
-
|
|
49
|
-
|
|
50
47
|
function hasHex(val) {
|
|
51
48
|
return val.indexOf('\\x') > -1 || val.indexOf("\\u") > -1;
|
|
52
49
|
}
|
|
50
|
+
|
|
53
51
|
/**
|
|
54
52
|
* 是否包含特殊字符
|
|
55
53
|
*
|
|
@@ -58,35 +56,28 @@ function hasHex(val) {
|
|
|
58
56
|
* @param {string} chars 特殊字符
|
|
59
57
|
* @returns {boolean} 是否包含特殊字符
|
|
60
58
|
*/
|
|
61
|
-
|
|
62
|
-
|
|
63
59
|
function hasSpecialCharacter(val, chars) {
|
|
64
60
|
if (!chars || !val) {
|
|
65
61
|
return false;
|
|
66
62
|
}
|
|
67
|
-
|
|
68
63
|
var specialChars = val.replace(regAllNumberAndLetter, '');
|
|
69
|
-
|
|
70
64
|
if (!specialChars) {
|
|
71
65
|
return false;
|
|
72
66
|
}
|
|
73
|
-
|
|
74
67
|
var regChars = hasHex(chars) ? new RegExp("[".concat(chars, "]")) : null;
|
|
75
|
-
|
|
76
68
|
if (regChars) {
|
|
77
69
|
return regChars.test(specialChars);
|
|
78
70
|
}
|
|
79
|
-
|
|
80
71
|
var ret = false;
|
|
81
72
|
specialChars.split('').some(function (charItem) {
|
|
82
73
|
if (chars.indexOf(charItem) > -1) {
|
|
83
74
|
ret = true;
|
|
84
75
|
}
|
|
85
|
-
|
|
86
76
|
return ret;
|
|
87
77
|
});
|
|
88
78
|
return ret;
|
|
89
79
|
}
|
|
80
|
+
|
|
90
81
|
/**
|
|
91
82
|
* 是否包含非法字符
|
|
92
83
|
*
|
|
@@ -95,37 +86,30 @@ function hasSpecialCharacter(val, chars) {
|
|
|
95
86
|
* @param {string} chars 特殊字符
|
|
96
87
|
* @returns {boolean} 是否包含非法字符
|
|
97
88
|
*/
|
|
98
|
-
|
|
99
|
-
|
|
100
89
|
function hasUnallowableCharacter(val, chars) {
|
|
101
90
|
if (!val) {
|
|
102
91
|
return false;
|
|
103
92
|
}
|
|
104
|
-
|
|
105
93
|
var specialChars = val.replace(regAllNumberAndLetter, '');
|
|
106
|
-
|
|
107
94
|
if (!specialChars) {
|
|
108
95
|
return false;
|
|
109
96
|
} else if (!chars) {
|
|
110
97
|
return true;
|
|
111
98
|
}
|
|
112
|
-
|
|
113
99
|
var regChars = hasHex(chars) ? new RegExp("[^".concat(chars, "]")) : null;
|
|
114
|
-
|
|
115
100
|
if (regChars) {
|
|
116
101
|
return regChars.test(specialChars);
|
|
117
102
|
}
|
|
118
|
-
|
|
119
103
|
var ret = false;
|
|
120
104
|
specialChars.split('').some(function (charItem) {
|
|
121
105
|
if (chars.indexOf(charItem) === -1) {
|
|
122
106
|
ret = true;
|
|
123
107
|
}
|
|
124
|
-
|
|
125
108
|
return ret;
|
|
126
109
|
});
|
|
127
110
|
return ret;
|
|
128
111
|
}
|
|
112
|
+
|
|
129
113
|
/**
|
|
130
114
|
* @typedef {Object} PasswordContaines - 验证密码的包含内容
|
|
131
115
|
* @property {boolean} number - 包含数字
|
|
@@ -214,40 +198,36 @@ function hasUnallowableCharacter(val, chars) {
|
|
|
214
198
|
* }
|
|
215
199
|
* }
|
|
216
200
|
*/
|
|
217
|
-
|
|
218
|
-
|
|
219
201
|
function validatePassword(value) {
|
|
220
202
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
221
203
|
var _options$level = options.level,
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
204
|
+
level = _options$level === void 0 ? 2 : _options$level,
|
|
205
|
+
_options$ignoreCase = options.ignoreCase,
|
|
206
|
+
ignoreCase = _options$ignoreCase === void 0 ? false : _options$ignoreCase,
|
|
207
|
+
_options$special = options.special,
|
|
208
|
+
special = _options$special === void 0 ? '\\x21-\\x2F\\x3A-\\x40\\x5B-\\x60\\x7B-\\x7E' : _options$special;
|
|
227
209
|
var valStr = value;
|
|
228
|
-
|
|
229
210
|
if (typeof value !== 'string') {
|
|
230
211
|
devWarn("[validatePassword] value must be a string.");
|
|
231
212
|
valStr = '';
|
|
232
213
|
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
var containesNumber = hasNumber(valStr);
|
|
237
|
-
|
|
238
|
-
var containesLowerCaseLetter = hasLowerCaseLetter(valStr);
|
|
239
|
-
|
|
240
|
-
var containesUpperCaseLetter = hasUpperCaseLetter(valStr);
|
|
241
|
-
|
|
242
|
-
var containesSpecialCharacter = hasSpecialCharacter(valStr, special);
|
|
243
|
-
|
|
214
|
+
var currentLevel = 0;
|
|
215
|
+
|
|
216
|
+
// 包含数字
|
|
217
|
+
var containesNumber = hasNumber(valStr);
|
|
218
|
+
// 包含小写字母
|
|
219
|
+
var containesLowerCaseLetter = hasLowerCaseLetter(valStr);
|
|
220
|
+
// 包含大写字母
|
|
221
|
+
var containesUpperCaseLetter = hasUpperCaseLetter(valStr);
|
|
222
|
+
// 包含特殊字符
|
|
223
|
+
var containesSpecialCharacter = hasSpecialCharacter(valStr, special);
|
|
224
|
+
// 包含非法字符,即含有非数字字母特殊字符以外的其他字符
|
|
244
225
|
var containesUnallowableCharacter = hasUnallowableCharacter(valStr, special);
|
|
245
|
-
|
|
246
226
|
if (containesNumber) {
|
|
247
227
|
currentLevel += 1;
|
|
248
|
-
}
|
|
249
|
-
|
|
228
|
+
}
|
|
250
229
|
|
|
230
|
+
// 不区分大小写
|
|
251
231
|
if (ignoreCase) {
|
|
252
232
|
if (containesLowerCaseLetter || containesUpperCaseLetter) {
|
|
253
233
|
currentLevel += 1;
|
|
@@ -257,17 +237,15 @@ function validatePassword(value) {
|
|
|
257
237
|
if (containesLowerCaseLetter) {
|
|
258
238
|
currentLevel += 1;
|
|
259
239
|
}
|
|
260
|
-
|
|
261
240
|
if (containesUpperCaseLetter) {
|
|
262
241
|
currentLevel += 1;
|
|
263
242
|
}
|
|
264
243
|
}
|
|
265
|
-
|
|
266
244
|
if (containesSpecialCharacter) {
|
|
267
245
|
currentLevel += 1;
|
|
268
|
-
}
|
|
269
|
-
|
|
246
|
+
}
|
|
270
247
|
|
|
248
|
+
// 验证结果
|
|
271
249
|
var validated = currentLevel >= level && !containesUnallowableCharacter;
|
|
272
250
|
return {
|
|
273
251
|
validated: validated,
|
|
@@ -281,5 +259,4 @@ function validatePassword(value) {
|
|
|
281
259
|
}
|
|
282
260
|
};
|
|
283
261
|
}
|
|
284
|
-
|
|
285
262
|
export default validatePassword;
|
package/esm/waitTime.js
CHANGED
package/lib/blobToDataURL.js
CHANGED
|
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports["default"] = void 0;
|
|
7
|
-
|
|
8
7
|
// file、blob文件如何预览图片?
|
|
9
8
|
// 方法1:将file或者blob类型文件转成base64数据,再作为src赋值给img标签
|
|
10
9
|
// 方法2:使用 window.URL.createObjectURL(blob) 为blob、file 创建一个指向该参数对象的URL
|
|
@@ -35,17 +34,15 @@ exports["default"] = void 0;
|
|
|
35
34
|
function blobToDataURL(blob) {
|
|
36
35
|
return new Promise(function (resolve, reject) {
|
|
37
36
|
var reader = new FileReader();
|
|
38
|
-
reader.readAsDataURL(blob);
|
|
39
|
-
|
|
37
|
+
reader.readAsDataURL(blob);
|
|
38
|
+
// @ts-ignore
|
|
40
39
|
reader.onload = function () {
|
|
41
40
|
return resolve(reader.result);
|
|
42
41
|
};
|
|
43
|
-
|
|
44
42
|
reader.onerror = function (error) {
|
|
45
43
|
return reject(error);
|
|
46
44
|
};
|
|
47
45
|
});
|
|
48
46
|
}
|
|
49
|
-
|
|
50
47
|
var _default = blobToDataURL;
|
|
51
48
|
exports["default"] = _default;
|
package/lib/bytesToSize.js
CHANGED
|
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports["default"] = void 0;
|
|
7
|
-
|
|
8
7
|
/**
|
|
9
8
|
* 字节转换存储单位,保留2位小数点
|
|
10
9
|
*
|
|
@@ -12,6 +11,8 @@ exports["default"] = void 0;
|
|
|
12
11
|
* @alias module:Processor.bytesToSize
|
|
13
12
|
* @since 3.8.0
|
|
14
13
|
* @param {number} bytes 字节大小
|
|
14
|
+
* @param {Object} [options] 配置项
|
|
15
|
+
* @param {string} [options.spaceMark=' '] 间隔字符
|
|
15
16
|
* @returns {string} 存储单位值
|
|
16
17
|
* @example
|
|
17
18
|
*
|
|
@@ -20,16 +21,22 @@ exports["default"] = void 0;
|
|
|
20
21
|
* bytesToSize(3.213243*1024*1024); // 3.21 MB
|
|
21
22
|
* bytesToSize(1024*1024*1024); // 1 GB
|
|
22
23
|
*
|
|
24
|
+
* // 自定义间隔符号
|
|
25
|
+
* bytesToSize(0, { spaceMark: '' }); // 0B
|
|
26
|
+
* bytesToSize(1024, { spaceMark: '' }); // 1KB
|
|
27
|
+
*
|
|
23
28
|
*/
|
|
24
29
|
function bytesToSize(bytes) {
|
|
30
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
31
|
+
var _options$spaceMark = options.spaceMark,
|
|
32
|
+
spaceMark = _options$spaceMark === void 0 ? ' ' : _options$spaceMark;
|
|
25
33
|
var numBytes = typeof bytes !== 'number' ? Number(bytes) : bytes;
|
|
26
|
-
if (numBytes === 0 || isNaN(numBytes)) return
|
|
27
|
-
var k = 1024;
|
|
28
|
-
|
|
34
|
+
if (numBytes === 0 || isNaN(numBytes)) return "0".concat(spaceMark, "B");
|
|
35
|
+
var k = 1024;
|
|
36
|
+
// 存储单位
|
|
29
37
|
var sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
|
|
30
38
|
var i = Math.floor(Math.log(numBytes) / Math.log(k));
|
|
31
|
-
return sizes[i] ? "".concat(Number((numBytes / Math.pow(k, i)).toFixed(2))
|
|
39
|
+
return sizes[i] ? "".concat(Number((numBytes / Math.pow(k, i)).toFixed(2))).concat(spaceMark).concat(sizes[i]) : numBytes + '';
|
|
32
40
|
}
|
|
33
|
-
|
|
34
41
|
var _default = bytesToSize;
|
|
35
42
|
exports["default"] = _default;
|
|
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports["default"] = void 0;
|
|
7
|
-
|
|
8
7
|
var _normalizeString = _interopRequireDefault(require("./normalizeString"));
|
|
9
|
-
|
|
10
8
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
11
|
-
|
|
12
9
|
// 参考了: https://github.com/ant-design/ant-design-mobile/blob/v2/components/input-item/index.tsx#L240
|
|
13
10
|
|
|
14
11
|
/**
|
|
@@ -34,23 +31,21 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
34
31
|
function calculateCursorPosition(prevPos, prevCtrlValue, rawValue, ctrlValue) {
|
|
35
32
|
var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
|
|
36
33
|
var _options$placeholderC = options.placeholderChar,
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
34
|
+
placeholderChar = _options$placeholderC === void 0 ? ' ' : _options$placeholderC,
|
|
35
|
+
_options$maskReg = options.maskReg,
|
|
36
|
+
maskReg = _options$maskReg === void 0 ? /\D/g : _options$maskReg,
|
|
37
|
+
type = options.type;
|
|
41
38
|
var realCtrlValue = (0, _normalizeString["default"])(prevCtrlValue);
|
|
42
39
|
var realRawValue = (0, _normalizeString["default"])(rawValue);
|
|
43
40
|
var placeholderChars = Array.isArray(placeholderChar) ? placeholderChar : [placeholderChar];
|
|
44
41
|
var editLength = realRawValue.length - realCtrlValue.length;
|
|
45
42
|
var isAddition = editLength > 0;
|
|
46
43
|
var pos = prevPos;
|
|
47
|
-
|
|
48
44
|
if (isAddition) {
|
|
49
45
|
var additionStr = realRawValue.substring(pos - editLength, pos);
|
|
50
46
|
var ctrlCharCount = additionStr.replace(maskReg, '').length;
|
|
51
47
|
pos -= editLength - ctrlCharCount;
|
|
52
48
|
var placeholderCharCount = 0;
|
|
53
|
-
|
|
54
49
|
while (ctrlCharCount > 0) {
|
|
55
50
|
if (placeholderChars.indexOf(ctrlValue.charAt(pos - ctrlCharCount + placeholderCharCount)) !== -1) {
|
|
56
51
|
placeholderCharCount++;
|
|
@@ -58,16 +53,12 @@ function calculateCursorPosition(prevPos, prevCtrlValue, rawValue, ctrlValue) {
|
|
|
58
53
|
ctrlCharCount--;
|
|
59
54
|
}
|
|
60
55
|
}
|
|
61
|
-
|
|
62
56
|
pos += placeholderCharCount;
|
|
63
57
|
}
|
|
64
|
-
|
|
65
58
|
if (type === 'mobile' && (pos === 4 || pos === 9) || type === 'bankCard' && pos > 0 && pos % 5 === 0) {
|
|
66
59
|
pos -= 1;
|
|
67
60
|
}
|
|
68
|
-
|
|
69
61
|
return pos;
|
|
70
62
|
}
|
|
71
|
-
|
|
72
63
|
var _default = calculateCursorPosition;
|
|
73
64
|
exports["default"] = _default;
|
package/lib/dataURLToBlob.js
CHANGED
|
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports["default"] = void 0;
|
|
7
|
-
|
|
8
7
|
/**
|
|
9
8
|
* 将 DataURL 转为 Blob 对象
|
|
10
9
|
*
|
|
@@ -19,21 +18,18 @@ exports["default"] = void 0;
|
|
|
19
18
|
* dataURLToBlob(dataurl); // Blob {size: 32, type: 'text/html'}
|
|
20
19
|
*/
|
|
21
20
|
function dataURLToBlob(dataurl) {
|
|
22
|
-
var arr = dataurl.split(',');
|
|
23
|
-
|
|
21
|
+
var arr = dataurl.split(',');
|
|
22
|
+
// @ts-ignore
|
|
24
23
|
var mime = arr[0].match(/:(.*?);/)[1];
|
|
25
24
|
var bstr = atob(arr[1]);
|
|
26
25
|
var n = bstr.length;
|
|
27
26
|
var u8arr = new Uint8Array(n);
|
|
28
|
-
|
|
29
27
|
while (n--) {
|
|
30
28
|
u8arr[n] = bstr.charCodeAt(n);
|
|
31
29
|
}
|
|
32
|
-
|
|
33
30
|
return new Blob([u8arr], {
|
|
34
31
|
type: mime
|
|
35
32
|
});
|
|
36
33
|
}
|
|
37
|
-
|
|
38
34
|
var _default = dataURLToBlob;
|
|
39
35
|
exports["default"] = _default;
|
package/lib/divide.js
CHANGED
|
@@ -4,25 +4,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports["default"] = void 0;
|
|
7
|
-
|
|
8
7
|
var _math = require("./utils/math.util");
|
|
9
|
-
|
|
10
8
|
var _times = _interopRequireDefault(require("./times"));
|
|
11
|
-
|
|
12
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
13
|
-
|
|
14
10
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
15
|
-
|
|
16
11
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
17
|
-
|
|
18
12
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
19
|
-
|
|
20
13
|
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
21
|
-
|
|
22
14
|
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
23
|
-
|
|
24
15
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
25
|
-
|
|
26
16
|
/**
|
|
27
17
|
* 精确除法,支持多个数相除,除数默认为 1 。
|
|
28
18
|
*
|
|
@@ -47,31 +37,27 @@ function divide() {
|
|
|
47
37
|
for (var _len = arguments.length, nums = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
48
38
|
nums[_key] = arguments[_key];
|
|
49
39
|
}
|
|
50
|
-
|
|
51
40
|
var num1 = nums[0],
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
41
|
+
_nums$ = nums[1],
|
|
42
|
+
num2 = _nums$ === void 0 ? 1 : _nums$,
|
|
43
|
+
rest = nums.slice(2);
|
|
56
44
|
if (rest.length > 0) {
|
|
57
45
|
return divide.apply(void 0, [divide(num1, num2)].concat(_toConsumableArray(rest)));
|
|
58
46
|
}
|
|
59
|
-
|
|
60
47
|
num1 = (0, _math.transformEffectiveNumber)(num1);
|
|
61
|
-
num2 = (0, _math.transformEffectiveNumber)(num2);
|
|
62
|
-
// @ts-ignore
|
|
48
|
+
num2 = (0, _math.transformEffectiveNumber)(num2);
|
|
63
49
|
|
|
50
|
+
// 兼容处理,如果参数包含无效数值时,返回 NaN
|
|
51
|
+
// @ts-ignore
|
|
64
52
|
if (isNaN(num1) || isNaN(num2)) {
|
|
65
53
|
return Number.NaN;
|
|
66
54
|
}
|
|
67
|
-
|
|
68
55
|
var num1Changed = (0, _math.float2Fixed)(num1);
|
|
69
56
|
var num2Changed = (0, _math.float2Fixed)(num2);
|
|
70
57
|
(0, _math.checkBoundary)(num1Changed);
|
|
71
|
-
(0, _math.checkBoundary)(num2Changed);
|
|
72
|
-
|
|
58
|
+
(0, _math.checkBoundary)(num2Changed);
|
|
59
|
+
// fix: 类似 10 ** -4 为 0.00009999999999999999,strip 修正
|
|
73
60
|
return (0, _times["default"])(num1Changed / num2Changed, (0, _math.strip)(Math.pow(10, (0, _math.digitLength)(num2) - (0, _math.digitLength)(num1))));
|
|
74
61
|
}
|
|
75
|
-
|
|
76
62
|
var _default = divide;
|
|
77
63
|
exports["default"] = _default;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
8
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
9
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
10
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
11
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
12
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
13
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
14
|
+
/**
|
|
15
|
+
* 查找树结构数据节点
|
|
16
|
+
*
|
|
17
|
+
* @static
|
|
18
|
+
* @alias module:Other.findTreeNode
|
|
19
|
+
* @since 4.14.0
|
|
20
|
+
* @template {any} T
|
|
21
|
+
* @template {(item: T) => boolean} F
|
|
22
|
+
* @param {T[]} tree 树结构数据
|
|
23
|
+
* @param {F} predicate 遍历每一项执行的函数,参数是当前遍历到的节点数据,如果返回 Truthy 将返回该节点
|
|
24
|
+
* @param {string} [childrenField='children'] 子级字段名
|
|
25
|
+
* @returns {T|undefined}
|
|
26
|
+
* @example
|
|
27
|
+
* const menus = [{ "id": "1", "name": "首页", "code": "trade", "pid": null }, { "id": "2", "name": "交易管理", "code": "trade", "pid": null, "children": [{ "id": "3", "name": "交易查询", "code": "trade-1", "pid": "2", "children": [{ "id": "4", "name": "交易查询-查询操作", "code": "trade-1-1", "pid": "3" }] }] }, { "id": "5", "name": "权限管理", "code": "authorization", "pid": null, "children": [{ "id": "6", "name": "角色管理", "code": "authorization-1", "pid": "5" }, { "id": "7", "name": "用户管理", "code": "authorization-2", "pid": "5" }] }];
|
|
28
|
+
*
|
|
29
|
+
* findTreeNode(menus, item=>item.id === '2');
|
|
30
|
+
* // {"id":"2","name":"交易管理","code":"trade","pid":null,"children":[{"id":"3","name":"交易查询","code":"trade-1","pid":"2","children":[{"id":"4","name":"交易查询-查询操作","code":"trade-1-1","pid":"3"}]}]}
|
|
31
|
+
*
|
|
32
|
+
* findTreeNode(menus, item=>item.id === '7');
|
|
33
|
+
* // {"id":"7","name":"用户管理","code":"authorization-2","pid":"5"}
|
|
34
|
+
*
|
|
35
|
+
* findTreeNode(menus, item=>item.id === 'not found');
|
|
36
|
+
* // undefined
|
|
37
|
+
*/
|
|
38
|
+
function findTreeNode(tree, predicate) {
|
|
39
|
+
var childrenField = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'children';
|
|
40
|
+
var stack = [];
|
|
41
|
+
|
|
42
|
+
/** @type {T|undefined} */
|
|
43
|
+
var node;
|
|
44
|
+
var _iterator = _createForOfIteratorHelper(tree),
|
|
45
|
+
_step;
|
|
46
|
+
try {
|
|
47
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
48
|
+
var item = _step.value;
|
|
49
|
+
stack.push(item);
|
|
50
|
+
while (stack.length) {
|
|
51
|
+
/** @type {T} */
|
|
52
|
+
// @ts-ignore
|
|
53
|
+
var temp = stack.pop();
|
|
54
|
+
if (predicate(temp)) {
|
|
55
|
+
node = temp;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** @type {T[]} */
|
|
60
|
+
// @ts-ignore
|
|
61
|
+
var children = temp[childrenField] || [];
|
|
62
|
+
stack.push.apply(stack, _toConsumableArray(children));
|
|
63
|
+
}
|
|
64
|
+
if (node) {
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
} catch (err) {
|
|
69
|
+
_iterator.e(err);
|
|
70
|
+
} finally {
|
|
71
|
+
_iterator.f();
|
|
72
|
+
}
|
|
73
|
+
return node;
|
|
74
|
+
}
|
|
75
|
+
var _default = findTreeNode;
|
|
76
|
+
exports["default"] = _default;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
var _type = require("./utils/type");
|
|
8
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
9
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
10
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
11
|
+
/**
|
|
12
|
+
* 内部实现
|
|
13
|
+
*
|
|
14
|
+
* @private
|
|
15
|
+
* @template {any} T
|
|
16
|
+
* @template {(item: T) => boolean} F
|
|
17
|
+
* @param {T[]} tree 树结构数据
|
|
18
|
+
* @param {F} predicate 遍历每一项执行的函数,参数是当前遍历到的节点数据,如果返回 Truthy 将返回包含该节点的所有父级节点
|
|
19
|
+
* @param {string} [childrenField='children'] 子级字段名
|
|
20
|
+
* @param {T[]} [path=[]] 当前遍历路径
|
|
21
|
+
* @returns {T[]}
|
|
22
|
+
*/
|
|
23
|
+
function internalFindTreeSelect(tree, predicate) {
|
|
24
|
+
var childrenField = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'children';
|
|
25
|
+
var path = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
|
|
26
|
+
if (!tree) {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
var _iterator = _createForOfIteratorHelper(tree),
|
|
30
|
+
_step;
|
|
31
|
+
try {
|
|
32
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
33
|
+
var item = _step.value;
|
|
34
|
+
path.push(item);
|
|
35
|
+
if (predicate(item)) {
|
|
36
|
+
return path;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// @ts-ignore
|
|
40
|
+
if ((0, _type.isObject)(item) && Array.isArray(item[childrenField]) && item[childrenField].length > 0) {
|
|
41
|
+
// @ts-ignore
|
|
42
|
+
var findChildren = internalFindTreeSelect(item[childrenField], predicate, childrenField, path);
|
|
43
|
+
if (findChildren.length > 0) {
|
|
44
|
+
return findChildren;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
path.pop();
|
|
48
|
+
}
|
|
49
|
+
} catch (err) {
|
|
50
|
+
_iterator.e(err);
|
|
51
|
+
} finally {
|
|
52
|
+
_iterator.f();
|
|
53
|
+
}
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* 查找包含当前节点的所有父级节点
|
|
59
|
+
*
|
|
60
|
+
* @static
|
|
61
|
+
* @alias module:Other.findTreeSelect
|
|
62
|
+
* @since 4.14.0
|
|
63
|
+
* @template {any} T
|
|
64
|
+
* @template {(item: T) => boolean} F
|
|
65
|
+
* @param {T[]} tree 树结构数据
|
|
66
|
+
* @param {F} predicate 遍历每一项执行的函数,参数是当前遍历到的节点数据,如果返回 Truthy 将返回包含该节点的所有父级节点
|
|
67
|
+
* @param {string} [childrenField='children'] 子级字段名
|
|
68
|
+
* @returns {T[]}
|
|
69
|
+
* @example
|
|
70
|
+
* const menus = [{ "id": "1", "name": "首页", "code": "trade", "pid": null }, { "id": "2", "name": "交易管理", "code": "trade", "pid": null, "children": [{ "id": "3", "name": "交易查询", "code": "trade-1", "pid": "2", "children": [{ "id": "4", "name": "交易查询-查询操作", "code": "trade-1-1", "pid": "3" }] }] }, { "id": "5", "name": "权限管理", "code": "authorization", "pid": null, "children": [{ "id": "6", "name": "角色管理", "code": "authorization-1", "pid": "5" }, { "id": "7", "name": "用户管理", "code": "authorization-2", "pid": "5" }] }];
|
|
71
|
+
*
|
|
72
|
+
* findTreeSelect(menus, item => item.id === '2');
|
|
73
|
+
* // [{"id":"2","name":"交易管理","code":"trade","pid":null,"children":[{"id":"3","name":"交易查询","code":"trade-1","pid":"2","children":[{"id":"4","name":"交易查询-查询操作","code":"trade-1-1","pid":"3"}]}]}]
|
|
74
|
+
*
|
|
75
|
+
* findTreeSelect(menus, item => item.id === '7');
|
|
76
|
+
* // [{"id":"5","name":"权限管理","code":"authorization","pid":null,"children":[{"id":"6","name":"角色管理","code":"authorization-1","pid":"5"},{"id":"7","name":"用户管理","code":"authorization-2","pid":"5"}]},{"id":"7","name":"用户管理","code":"authorization-2","pid":"5"}]
|
|
77
|
+
*
|
|
78
|
+
* findTreeSelect(menus, item => item.id === 'not found');
|
|
79
|
+
* // []
|
|
80
|
+
*/
|
|
81
|
+
function findTreeSelect(tree, predicate) {
|
|
82
|
+
var childrenField = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'children';
|
|
83
|
+
return internalFindTreeSelect(tree, predicate, childrenField);
|
|
84
|
+
}
|
|
85
|
+
var _default = findTreeSelect;
|
|
86
|
+
exports["default"] = _default;
|
package/lib/formatBankCard.js
CHANGED
|
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports["default"] = void 0;
|
|
7
|
-
|
|
8
7
|
var _normalizeString = _interopRequireDefault(require("./normalizeString"));
|
|
9
|
-
|
|
10
8
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
11
|
-
|
|
12
9
|
/**
|
|
13
10
|
* 格式化银行卡号
|
|
14
11
|
*
|
|
@@ -17,7 +14,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
17
14
|
* @since 1.1.0
|
|
18
15
|
* @param {string} bankCardNo 要处理的字符串
|
|
19
16
|
* @param {Object} [options] 配置项
|
|
20
|
-
* @param {string} [options.
|
|
17
|
+
* @param {string} [options.spaceMark=' '] 间隔字符
|
|
21
18
|
* @param {number} [options.length=4] 间隔长度
|
|
22
19
|
* @returns {string} 格式化的银行卡号
|
|
23
20
|
* @example
|
|
@@ -32,24 +29,24 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
32
29
|
* formatBankCard('6228********890'); // 6228 **** **** 890
|
|
33
30
|
*
|
|
34
31
|
* // 16位银行卡,"-"间隔
|
|
35
|
-
* formatBankCard('6228480402564890', {
|
|
32
|
+
* formatBankCard('6228480402564890', {spaceMark: '-'}); // 6228-4804-0256-4890
|
|
36
33
|
*
|
|
37
34
|
*/
|
|
38
35
|
function formatBankCard() {
|
|
39
36
|
var bankCardNo = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
40
37
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
41
|
-
|
|
38
|
+
// @ts-ignore
|
|
39
|
+
// TODO 下个版本废弃 char
|
|
42
40
|
var _options$char = options["char"],
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
41
|
+
_char = _options$char === void 0 ? ' ' : _options$char,
|
|
42
|
+
_options$length = options.length,
|
|
43
|
+
length = _options$length === void 0 ? 4 : _options$length;
|
|
44
|
+
var realSpaceMark = 'spaceMark' in options ? options.spaceMark : _char;
|
|
47
45
|
var reg = new RegExp("(.{".concat(length, "})"), 'g');
|
|
48
|
-
var regChar = new RegExp("".concat(
|
|
46
|
+
var regChar = new RegExp("".concat(realSpaceMark), 'g');
|
|
49
47
|
var realValue = (0, _normalizeString["default"])(bankCardNo).replace(regChar, '');
|
|
50
|
-
var str = realValue.replace(reg, "$1".concat(
|
|
48
|
+
var str = realValue.replace(reg, "$1".concat(realSpaceMark));
|
|
51
49
|
return realValue.length % length === 0 ? str.substring(0, str.length - 1) : str;
|
|
52
50
|
}
|
|
53
|
-
|
|
54
51
|
var _default = formatBankCard;
|
|
55
52
|
exports["default"] = _default;
|