util-helpers 4.11.0 → 4.12.1
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/dist/util-helpers.js +979 -606
- 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/divide.js +6 -6
- package/esm/index.js +35 -1
- package/esm/minus.js +6 -6
- package/esm/plus.js +6 -6
- package/esm/round.js +4 -5
- package/esm/times.js +6 -6
- package/esm/utils/config.js +2 -1
- package/esm/utils/math.util.js +30 -0
- package/lib/divide.js +5 -6
- package/lib/index.js +6 -0
- package/lib/minus.js +5 -6
- package/lib/plus.js +5 -6
- package/lib/round.js +4 -5
- package/lib/times.js +5 -6
- package/lib/utils/config.js +3 -1
- package/lib/utils/math.util.js +33 -0
- package/package.json +4 -1
- package/types/src/blobToDataURL.d.ts +25 -0
- package/types/src/bytesToSize.d.ts +24 -0
- package/types/src/calculateCursorPosition.d.ts +26 -0
- package/types/src/dataURLToBlob.d.ts +15 -0
- package/types/src/divide.d.ts +21 -0
- package/types/src/formatBankCard.d.ts +35 -0
- package/types/src/formatMobile.d.ts +27 -0
- package/types/src/formatMoney.d.ts +50 -0
- package/types/src/index.d.ts +45 -0
- package/types/src/isBankCard.d.ts +32 -0
- package/types/src/isBusinessLicense.d.ts +29 -0
- package/types/src/isChinese.d.ts +41 -0
- package/types/src/isEmail.d.ts +19 -0
- package/types/src/isHMCard.d.ts +24 -0
- package/types/src/isIPv4.d.ts +25 -0
- package/types/src/isIPv6.d.ts +50 -0
- package/types/src/isIdCard.d.ts +34 -0
- package/types/src/isMobile.d.ts +19 -0
- package/types/src/isPassport.d.ts +21 -0
- package/types/src/isPassword.d.ts +46 -0
- package/types/src/isPostcode.d.ts +19 -0
- package/types/src/isPromiseLike.d.ts +21 -0
- package/types/src/isQQ.d.ts +19 -0
- package/types/src/isSocialCreditCode.d.ts +31 -0
- package/types/src/isSwiftCode.d.ts +22 -0
- package/types/src/isTWCard.d.ts +23 -0
- package/types/src/isTelephone.d.ts +25 -0
- package/types/src/isUrl.d.ts +34 -0
- package/types/src/isVehicle.d.ts +29 -0
- package/types/src/isWX.d.ts +19 -0
- package/types/src/minus.d.ts +21 -0
- package/types/src/normalizeString.d.ts +22 -0
- package/types/src/numberToChinese.d.ts +57 -0
- package/types/src/padZero.d.ts +24 -0
- package/types/src/parseIdCard.d.ts +107 -0
- package/types/src/plus.d.ts +21 -0
- package/types/src/randomString.d.ts +19 -0
- package/types/src/replaceChar.d.ts +54 -0
- package/types/src/round.d.ts +22 -0
- package/types/src/safeDate.d.ts +22 -0
- package/types/src/setDataURLPrefix.d.ts +24 -0
- package/types/src/strlen.d.ts +20 -0
- package/types/src/times.d.ts +21 -0
- package/types/src/utils/config.d.ts +13 -0
- package/types/src/utils/constants.d.ts +2 -0
- package/types/src/utils/convertToString.d.ts +8 -0
- package/types/src/utils/devWarn.d.ts +7 -0
- package/types/src/utils/math.util.d.ts +63 -0
- package/types/src/utils/type/index.d.ts +19 -0
- package/types/src/utils/type/isArguments.d.ts +18 -0
- package/types/src/utils/type/isArray.d.ts +18 -0
- package/types/src/utils/type/isBoolean.d.ts +18 -0
- package/types/src/utils/type/isDate.d.ts +18 -0
- package/types/src/utils/type/isError.d.ts +18 -0
- package/types/src/utils/type/isFunction.d.ts +18 -0
- package/types/src/utils/type/isMap.d.ts +18 -0
- package/types/src/utils/type/isNaN.d.ts +18 -0
- package/types/src/utils/type/isNil.d.ts +11 -0
- package/types/src/utils/type/isNull.d.ts +18 -0
- package/types/src/utils/type/isNumber.d.ts +27 -0
- package/types/src/utils/type/isObject.d.ts +21 -0
- package/types/src/utils/type/isRegExp.d.ts +18 -0
- package/types/src/utils/type/isSet.d.ts +18 -0
- package/types/src/utils/type/isString.d.ts +18 -0
- package/types/src/utils/type/isSymbol.d.ts +18 -0
- package/types/src/utils/type/isType.d.ts +11 -0
- package/types/src/utils/type/isUndefined.d.ts +21 -0
- package/types/src/utils/type/isWeakMap.d.ts +18 -0
- package/types/src/utils/type/isWeakSet.d.ts +18 -0
- package/types/src/validatePassword.d.ts +134 -0
- package/types/src/waitTime.d.ts +20 -0
- package/types/utils/math.util.d.ts +7 -0
package/dist/util-helpers.js
CHANGED
|
@@ -56,12 +56,12 @@
|
|
|
56
56
|
* @param {*} value 检查值
|
|
57
57
|
* @returns {boolean} 是否为 undefined 或 null
|
|
58
58
|
*/
|
|
59
|
+
|
|
59
60
|
function isNil(value) {
|
|
60
61
|
return isUndefined(value) || isNull(value);
|
|
61
62
|
}
|
|
62
63
|
|
|
63
|
-
|
|
64
|
-
|
|
64
|
+
var toString = Object.prototype.toString;
|
|
65
65
|
/**
|
|
66
66
|
* 检测值的 `toString` 类型
|
|
67
67
|
*
|
|
@@ -71,8 +71,9 @@
|
|
|
71
71
|
* @param {string} typename 类型名称
|
|
72
72
|
* @returns {boolean} 返回值的 `toString` 类型是否匹配
|
|
73
73
|
*/
|
|
74
|
+
|
|
74
75
|
function isType(value, typename) {
|
|
75
|
-
return toString.call(value) ===
|
|
76
|
+
return toString.call(value) === "[object ".concat(typename, "]");
|
|
76
77
|
}
|
|
77
78
|
|
|
78
79
|
/**
|
|
@@ -91,6 +92,7 @@
|
|
|
91
92
|
* isString(1)
|
|
92
93
|
* // => false
|
|
93
94
|
*/
|
|
95
|
+
|
|
94
96
|
function isString(value) {
|
|
95
97
|
return isType(value, 'String');
|
|
96
98
|
}
|
|
@@ -101,6 +103,7 @@
|
|
|
101
103
|
* @param {*} value 值
|
|
102
104
|
* @returns {string} 字符串
|
|
103
105
|
*/
|
|
106
|
+
|
|
104
107
|
function convertToString(value) {
|
|
105
108
|
return isString(value) ? value : String(value);
|
|
106
109
|
}
|
|
@@ -125,16 +128,16 @@
|
|
|
125
128
|
* normalizeString(1); // '1'
|
|
126
129
|
* normalizeString('a'); // 'a'
|
|
127
130
|
*/
|
|
131
|
+
|
|
128
132
|
function normalizeString(value) {
|
|
129
133
|
if (isNil(value)) {
|
|
130
134
|
return '';
|
|
131
135
|
}
|
|
136
|
+
|
|
132
137
|
return convertToString(value);
|
|
133
138
|
}
|
|
134
139
|
|
|
135
|
-
|
|
136
|
-
const reg$d = /^1[3456789]\d{9}$/;
|
|
137
|
-
|
|
140
|
+
var reg$d = /^1[3456789]\d{9}$/;
|
|
138
141
|
/**
|
|
139
142
|
* 检测值是否为手机号码
|
|
140
143
|
*
|
|
@@ -152,14 +155,13 @@
|
|
|
152
155
|
* // => false
|
|
153
156
|
*
|
|
154
157
|
*/
|
|
158
|
+
|
|
155
159
|
function isMobile(value) {
|
|
156
|
-
|
|
160
|
+
var valueStr = normalizeString(value);
|
|
157
161
|
return reg$d.test(valueStr);
|
|
158
162
|
}
|
|
159
163
|
|
|
160
|
-
|
|
161
|
-
const reg$c = /^(0\d{2,3}\-)?([2-9]\d{6,7})(\-\d{1,6})?$/;
|
|
162
|
-
|
|
164
|
+
var reg$c = /^(0\d{2,3}\-)?([2-9]\d{6,7})(\-\d{1,6})?$/;
|
|
163
165
|
/**
|
|
164
166
|
* 检测值是否为固定电话
|
|
165
167
|
*
|
|
@@ -183,14 +185,13 @@
|
|
|
183
185
|
* // => false
|
|
184
186
|
*
|
|
185
187
|
*/
|
|
188
|
+
|
|
186
189
|
function isTelephone(value) {
|
|
187
|
-
|
|
190
|
+
var valueStr = normalizeString(value);
|
|
188
191
|
return reg$c.test(valueStr);
|
|
189
192
|
}
|
|
190
193
|
|
|
191
|
-
|
|
192
|
-
const reg$b = /^\d{6}$/;
|
|
193
|
-
|
|
194
|
+
var reg$b = /^\d{6}$/;
|
|
194
195
|
/**
|
|
195
196
|
* 检测值是否为邮政编码,6位数字
|
|
196
197
|
*
|
|
@@ -208,14 +209,13 @@
|
|
|
208
209
|
* // => false
|
|
209
210
|
*
|
|
210
211
|
*/
|
|
212
|
+
|
|
211
213
|
function isPostcode(value) {
|
|
212
|
-
|
|
214
|
+
var valueStr = normalizeString(value);
|
|
213
215
|
return reg$b.test(valueStr);
|
|
214
216
|
}
|
|
215
217
|
|
|
216
|
-
|
|
217
|
-
const regIdCard$1 = /^[1-9]\d{5}(19|20)?\d{2}((0[1-9])|(1[012]))(([0-2][1-9])|10|20|30|31)\d{3}(\d|X)?$/i;
|
|
218
|
-
|
|
218
|
+
var regIdCard$1 = /^[1-9]\d{5}(19|20)?\d{2}((0[1-9])|(1[012]))(([0-2][1-9])|10|20|30|31)\d{3}(\d|X)?$/i;
|
|
219
219
|
/**
|
|
220
220
|
* 校验码计算
|
|
221
221
|
*
|
|
@@ -225,19 +225,22 @@
|
|
|
225
225
|
* @param {string} id 身份证号码
|
|
226
226
|
* @returns {boolean} 校验码是否正确
|
|
227
227
|
*/
|
|
228
|
+
|
|
228
229
|
function check(id) {
|
|
229
|
-
|
|
230
|
+
var index, sum, num;
|
|
231
|
+
|
|
230
232
|
for (sum = index = 0; index < 17; index++) {
|
|
231
|
-
sum +=
|
|
233
|
+
sum += Math.pow(2, 17 - index) % 11 * Number(id[index]);
|
|
232
234
|
}
|
|
233
|
-
|
|
235
|
+
|
|
236
|
+
num = (12 - sum % 11) % 11;
|
|
237
|
+
|
|
234
238
|
if (num < 10) {
|
|
235
239
|
return num === Number(id[17]);
|
|
236
240
|
} else {
|
|
237
241
|
return id[17].toUpperCase() === 'X';
|
|
238
242
|
}
|
|
239
243
|
}
|
|
240
|
-
|
|
241
244
|
/**
|
|
242
245
|
* 检测值是否为18位身份证号码。<br/>宽松模式下,支持15位身份证号码
|
|
243
246
|
*
|
|
@@ -267,8 +270,17 @@
|
|
|
267
270
|
* // => true
|
|
268
271
|
*
|
|
269
272
|
*/
|
|
270
|
-
|
|
271
|
-
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
function isIdCard(value) {
|
|
276
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
277
|
+
_ref$loose = _ref.loose,
|
|
278
|
+
loose = _ref$loose === void 0 ? false : _ref$loose,
|
|
279
|
+
_ref$checkCode = _ref.checkCode,
|
|
280
|
+
checkCode = _ref$checkCode === void 0 ? true : _ref$checkCode;
|
|
281
|
+
|
|
282
|
+
var valueStr = normalizeString(value);
|
|
283
|
+
|
|
272
284
|
if (valueStr.length === 15 && loose) {
|
|
273
285
|
return regIdCard$1.test(valueStr);
|
|
274
286
|
}
|
|
@@ -277,15 +289,14 @@
|
|
|
277
289
|
if (checkCode) {
|
|
278
290
|
return check(valueStr);
|
|
279
291
|
}
|
|
292
|
+
|
|
280
293
|
return true;
|
|
281
294
|
}
|
|
282
295
|
|
|
283
296
|
return false;
|
|
284
297
|
}
|
|
285
298
|
|
|
286
|
-
|
|
287
|
-
const reg$a = /^[\da-z]+([\-\.\_]?[\da-z]+)*@[\da-z]+([\-\.]?[\da-z]+)*(\.[a-z]{2,})+$/i;
|
|
288
|
-
|
|
299
|
+
var reg$a = /^[\da-z]+([\-\.\_]?[\da-z]+)*@[\da-z]+([\-\.]?[\da-z]+)*(\.[a-z]{2,})+$/i;
|
|
289
300
|
/**
|
|
290
301
|
* 检测值是否为Email
|
|
291
302
|
*
|
|
@@ -303,14 +314,13 @@
|
|
|
303
314
|
* // => false
|
|
304
315
|
*
|
|
305
316
|
*/
|
|
317
|
+
|
|
306
318
|
function isEmail(value) {
|
|
307
|
-
|
|
319
|
+
var valueStr = normalizeString(value);
|
|
308
320
|
return reg$a.test(valueStr);
|
|
309
321
|
}
|
|
310
322
|
|
|
311
|
-
|
|
312
|
-
const reg$9 = /^[1-9]\d{4,10}$/;
|
|
313
|
-
|
|
323
|
+
var reg$9 = /^[1-9]\d{4,10}$/;
|
|
314
324
|
/**
|
|
315
325
|
* 检测值是否为QQ号,非0开头,5至11位数字
|
|
316
326
|
*
|
|
@@ -328,14 +338,13 @@
|
|
|
328
338
|
* // => false
|
|
329
339
|
*
|
|
330
340
|
*/
|
|
341
|
+
|
|
331
342
|
function isQQ(value) {
|
|
332
|
-
|
|
343
|
+
var valueStr = normalizeString(value);
|
|
333
344
|
return reg$9.test(valueStr);
|
|
334
345
|
}
|
|
335
346
|
|
|
336
|
-
|
|
337
|
-
const reg$8 = /^[a-z]([-_a-z0-9]{5,19})+$/i;
|
|
338
|
-
|
|
347
|
+
var reg$8 = /^[a-z]([-_a-z0-9]{5,19})+$/i;
|
|
339
348
|
/**
|
|
340
349
|
* 检测值是否为微信号
|
|
341
350
|
*
|
|
@@ -353,14 +362,13 @@
|
|
|
353
362
|
* // => false
|
|
354
363
|
*
|
|
355
364
|
*/
|
|
365
|
+
|
|
356
366
|
function isWX(value) {
|
|
357
|
-
|
|
367
|
+
var valueStr = normalizeString(value);
|
|
358
368
|
return reg$8.test(valueStr);
|
|
359
369
|
}
|
|
360
370
|
|
|
361
|
-
|
|
362
|
-
const reg$7 = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([A-Z0-9]{4}[A-Z0-9挂学警港澳]{1})|([A-Z0-9]{5}[DF])|([DF][A-Z0-9]{5}))$/;
|
|
363
|
-
|
|
371
|
+
var reg$7 = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([A-Z0-9]{4}[A-Z0-9挂学警港澳]{1})|([A-Z0-9]{5}[DF])|([DF][A-Z0-9]{5}))$/;
|
|
364
372
|
/**
|
|
365
373
|
* 检测值是否为车牌号,支持新能源和非新能源车牌
|
|
366
374
|
*
|
|
@@ -388,35 +396,34 @@
|
|
|
388
396
|
* // => true
|
|
389
397
|
*
|
|
390
398
|
*/
|
|
399
|
+
|
|
391
400
|
function isVehicle(value) {
|
|
392
|
-
|
|
401
|
+
var valueStr = normalizeString(value);
|
|
393
402
|
return reg$7.test(valueStr);
|
|
394
403
|
}
|
|
395
404
|
|
|
396
|
-
//
|
|
397
|
-
const reg$6 = /^[1-9]\d{9,20}$/;
|
|
398
|
-
|
|
399
|
-
// 8~30位数字
|
|
400
|
-
const regLoose = /^\d{8,30}$/;
|
|
405
|
+
var reg$6 = /^[1-9]\d{9,20}$/; // 8~30位数字
|
|
401
406
|
|
|
407
|
+
var regLoose = /^\d{8,30}$/;
|
|
402
408
|
/**
|
|
403
409
|
* luhn 计算校验位
|
|
404
410
|
* @private
|
|
405
411
|
* @param {string} numStr 银行卡前面数字
|
|
406
412
|
* @returns {number}
|
|
407
413
|
*/
|
|
414
|
+
|
|
408
415
|
function sumCheckCode$2(numStr) {
|
|
409
|
-
|
|
416
|
+
var numArr = (numStr + '').replace(/\D/g, '').split('').reverse();
|
|
417
|
+
var sum = 0;
|
|
410
418
|
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
const currNum = parseInt(numArr[i]);
|
|
419
|
+
for (var i = 0; i < numArr.length; i++) {
|
|
420
|
+
var currNum = parseInt(numArr[i]);
|
|
414
421
|
sum += i % 2 === 0 ? currNum * 2 - (currNum > 4 ? 9 : 0) : currNum;
|
|
415
422
|
}
|
|
416
|
-
|
|
423
|
+
|
|
424
|
+
var mod = sum % 10;
|
|
417
425
|
return mod !== 0 ? 10 - mod : 0;
|
|
418
426
|
}
|
|
419
|
-
|
|
420
427
|
/**
|
|
421
428
|
* 检测值是否为银行卡号。正常模式(非0开头,10~21位数字)宽松模式(8~30位数字)
|
|
422
429
|
*
|
|
@@ -444,24 +451,30 @@
|
|
|
444
451
|
* // => true
|
|
445
452
|
*
|
|
446
453
|
*/
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
454
|
+
|
|
455
|
+
|
|
456
|
+
function isBankCard(value) {
|
|
457
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
458
|
+
_ref$loose = _ref.loose,
|
|
459
|
+
loose = _ref$loose === void 0 ? false : _ref$loose,
|
|
460
|
+
_ref$luhn = _ref.luhn,
|
|
461
|
+
luhn = _ref$luhn === void 0 ? false : _ref$luhn;
|
|
462
|
+
|
|
463
|
+
var valueStr = normalizeString(value);
|
|
464
|
+
var validateResult = loose ? regLoose.test(valueStr) : reg$6.test(valueStr);
|
|
450
465
|
|
|
451
466
|
if (validateResult && luhn) {
|
|
452
|
-
|
|
453
|
-
|
|
467
|
+
var precode = valueStr.substring(0, valueStr.length - 1);
|
|
468
|
+
var checkCode = valueStr[valueStr.length - 1];
|
|
454
469
|
return checkCode === String(sumCheckCode$2(precode));
|
|
455
470
|
}
|
|
471
|
+
|
|
456
472
|
return validateResult;
|
|
457
473
|
}
|
|
458
474
|
|
|
459
|
-
//
|
|
460
|
-
const baseReg$1 = /^[\dA-HJ-NPQRTUWXY]{2}\d{6}[\dA-HJ-NPQRTUWXY]{10}$/;
|
|
461
|
-
|
|
462
|
-
// 基础字符组成
|
|
463
|
-
const baseCodeArr = '0123456789ABCDEFGHJKLMNPQRTUWXY'.split('');
|
|
475
|
+
var baseReg$1 = /^[\dA-HJ-NPQRTUWXY]{2}\d{6}[\dA-HJ-NPQRTUWXY]{10}$/; // 基础字符组成
|
|
464
476
|
|
|
477
|
+
var baseCodeArr = '0123456789ABCDEFGHJKLMNPQRTUWXY'.split('');
|
|
465
478
|
/**
|
|
466
479
|
* 计算校验码
|
|
467
480
|
*
|
|
@@ -470,27 +483,31 @@
|
|
|
470
483
|
* @param {string} preCode 统一代码前17位
|
|
471
484
|
* @returns {string} 校验码
|
|
472
485
|
*/
|
|
486
|
+
|
|
473
487
|
function sumCheckCode$1(preCode) {
|
|
474
|
-
|
|
488
|
+
var total = 0; // 计算字符位置对应序号和加权因子的乘积,总和
|
|
475
489
|
|
|
476
|
-
|
|
477
|
-
for (let i = 0; i < 17; i++) {
|
|
490
|
+
var _loop = function _loop(i) {
|
|
478
491
|
// 字符位置对应的基础编码序号
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
492
|
+
var index = baseCodeArr.findIndex(function (item) {
|
|
493
|
+
return item === preCode[i];
|
|
494
|
+
}); // 加权因子
|
|
495
|
+
|
|
496
|
+
var wf = Math.pow(3, i) % 31; // 计算序号和加权因子的乘积,并计算级数之和
|
|
497
|
+
|
|
483
498
|
total += index * wf;
|
|
484
|
-
}
|
|
499
|
+
};
|
|
485
500
|
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
//
|
|
489
|
-
const checkCodeIndex = remainder !== 0 ? 31 - remainder : 0;
|
|
501
|
+
for (var i = 0; i < 17; i++) {
|
|
502
|
+
_loop(i);
|
|
503
|
+
} // 计算整数求余函数MOD
|
|
490
504
|
|
|
505
|
+
|
|
506
|
+
var remainder = total % 31; // 校验码字符值序号
|
|
507
|
+
|
|
508
|
+
var checkCodeIndex = remainder !== 0 ? 31 - remainder : 0;
|
|
491
509
|
return baseCodeArr[checkCodeIndex];
|
|
492
510
|
}
|
|
493
|
-
|
|
494
511
|
/**
|
|
495
512
|
* 检测值是否为统一社会信用代码,也叫三证合一组织代码。由18位数字和大写字母组成,不使用I、O、Z、S、V。
|
|
496
513
|
*
|
|
@@ -518,35 +535,39 @@
|
|
|
518
535
|
* // => false
|
|
519
536
|
*
|
|
520
537
|
*/
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
538
|
+
|
|
539
|
+
|
|
540
|
+
function isSocialCreditCode(value) {
|
|
541
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
542
|
+
var valueStr = normalizeString(value); // @ts-ignore
|
|
524
543
|
// TODO 下个版本废弃 loose
|
|
525
|
-
const { loose = false, checkCode: cc = true } = options;
|
|
526
|
-
const needCheckCode = !loose && cc;
|
|
527
544
|
|
|
528
|
-
|
|
545
|
+
var _options$loose = options.loose,
|
|
546
|
+
loose = _options$loose === void 0 ? false : _options$loose,
|
|
547
|
+
_options$checkCode = options.checkCode,
|
|
548
|
+
cc = _options$checkCode === void 0 ? true : _options$checkCode;
|
|
549
|
+
var needCheckCode = !loose && cc;
|
|
550
|
+
var passBaseRule = baseReg$1.test(valueStr); // 宽松模式 或 基础规则不通过直接返回
|
|
529
551
|
|
|
530
|
-
// 宽松模式 或 基础规则不通过直接返回
|
|
531
552
|
if (!needCheckCode || !passBaseRule) {
|
|
532
553
|
return passBaseRule;
|
|
533
|
-
}
|
|
554
|
+
} // 前17位
|
|
555
|
+
|
|
534
556
|
|
|
535
|
-
//
|
|
536
|
-
const preCode = valueStr.substring(0, 17);
|
|
537
|
-
// 校验码
|
|
538
|
-
const lastCode = valueStr.substring(valueStr.length - 1);
|
|
539
|
-
// 计算校验码
|
|
540
|
-
const checkCode = sumCheckCode$1(preCode);
|
|
557
|
+
var preCode = valueStr.substring(0, 17); // 校验码
|
|
541
558
|
|
|
559
|
+
var lastCode = valueStr.substring(valueStr.length - 1); // 计算校验码
|
|
560
|
+
|
|
561
|
+
var checkCode = sumCheckCode$1(preCode);
|
|
542
562
|
return lastCode === checkCode;
|
|
543
563
|
}
|
|
544
564
|
|
|
545
|
-
const
|
|
565
|
+
const version = "4.12.1";
|
|
566
|
+
|
|
567
|
+
var config = {
|
|
546
568
|
// 禁用warning提示
|
|
547
569
|
disableWarning: true
|
|
548
570
|
};
|
|
549
|
-
|
|
550
571
|
/**
|
|
551
572
|
* 设置禁止warning提示
|
|
552
573
|
* @static
|
|
@@ -554,6 +575,7 @@
|
|
|
554
575
|
* @since 3.6.1
|
|
555
576
|
* @param {boolean} bool 是否禁止warning提示
|
|
556
577
|
*/
|
|
578
|
+
|
|
557
579
|
function setDisableWarning(bool) {
|
|
558
580
|
config.disableWarning = !!bool;
|
|
559
581
|
}
|
|
@@ -563,17 +585,19 @@
|
|
|
563
585
|
*
|
|
564
586
|
* @param {any[]} args 打印的信息
|
|
565
587
|
*/
|
|
566
|
-
|
|
588
|
+
|
|
589
|
+
function devWarn() {
|
|
567
590
|
if (!config.disableWarning) {
|
|
568
|
-
|
|
591
|
+
var _console;
|
|
592
|
+
|
|
593
|
+
(_console = console).warn.apply(_console, arguments);
|
|
569
594
|
}
|
|
570
595
|
}
|
|
571
596
|
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
597
|
+
var regNumber = /[\d]/;
|
|
598
|
+
var regLowerCaseLetter = /[a-z]/;
|
|
599
|
+
var regUpperCaseLetter = /[A-Z]/;
|
|
600
|
+
var regAllNumberAndLetter = /[\d|a-z]/gi;
|
|
577
601
|
/**
|
|
578
602
|
* 是否包含数字
|
|
579
603
|
*
|
|
@@ -581,10 +605,10 @@
|
|
|
581
605
|
* @param {string} val 检查的值
|
|
582
606
|
* @returns {boolean} 是否包含数字
|
|
583
607
|
*/
|
|
608
|
+
|
|
584
609
|
function hasNumber(val) {
|
|
585
610
|
return regNumber.test(val);
|
|
586
611
|
}
|
|
587
|
-
|
|
588
612
|
/**
|
|
589
613
|
* 是否包含小写字母
|
|
590
614
|
*
|
|
@@ -592,10 +616,11 @@
|
|
|
592
616
|
* @param {string} val 检测的值
|
|
593
617
|
* @returns {boolean} 是否包含小写字母
|
|
594
618
|
*/
|
|
619
|
+
|
|
620
|
+
|
|
595
621
|
function hasLowerCaseLetter(val) {
|
|
596
622
|
return regLowerCaseLetter.test(val);
|
|
597
623
|
}
|
|
598
|
-
|
|
599
624
|
/**
|
|
600
625
|
* 是否包含大写字母
|
|
601
626
|
*
|
|
@@ -603,10 +628,11 @@
|
|
|
603
628
|
* @param {string} val 检测的值
|
|
604
629
|
* @returns {boolean} 是否包含大写字母
|
|
605
630
|
*/
|
|
631
|
+
|
|
632
|
+
|
|
606
633
|
function hasUpperCaseLetter(val) {
|
|
607
634
|
return regUpperCaseLetter.test(val);
|
|
608
635
|
}
|
|
609
|
-
|
|
610
636
|
/**
|
|
611
637
|
* 是否为十六进制
|
|
612
638
|
*
|
|
@@ -614,10 +640,11 @@
|
|
|
614
640
|
* @param {string} val 检测的值
|
|
615
641
|
* @returns {boolean} 是否为十六进制
|
|
616
642
|
*/
|
|
643
|
+
|
|
644
|
+
|
|
617
645
|
function hasHex(val) {
|
|
618
|
-
return val.indexOf('\\x') > -1 || val.indexOf(
|
|
646
|
+
return val.indexOf('\\x') > -1 || val.indexOf("\\u") > -1;
|
|
619
647
|
}
|
|
620
|
-
|
|
621
648
|
/**
|
|
622
649
|
* 是否包含特殊字符
|
|
623
650
|
*
|
|
@@ -626,33 +653,35 @@
|
|
|
626
653
|
* @param {string} chars 特殊字符
|
|
627
654
|
* @returns {boolean} 是否包含特殊字符
|
|
628
655
|
*/
|
|
656
|
+
|
|
657
|
+
|
|
629
658
|
function hasSpecialCharacter(val, chars) {
|
|
630
659
|
if (!chars || !val) {
|
|
631
660
|
return false;
|
|
632
661
|
}
|
|
633
662
|
|
|
634
|
-
|
|
663
|
+
var specialChars = val.replace(regAllNumberAndLetter, '');
|
|
635
664
|
|
|
636
665
|
if (!specialChars) {
|
|
637
666
|
return false;
|
|
638
667
|
}
|
|
639
668
|
|
|
640
|
-
|
|
669
|
+
var regChars = hasHex(chars) ? new RegExp("[".concat(chars, "]")) : null;
|
|
641
670
|
|
|
642
671
|
if (regChars) {
|
|
643
672
|
return regChars.test(specialChars);
|
|
644
673
|
}
|
|
645
674
|
|
|
646
|
-
|
|
647
|
-
specialChars.split('').some((charItem)
|
|
675
|
+
var ret = false;
|
|
676
|
+
specialChars.split('').some(function (charItem) {
|
|
648
677
|
if (chars.indexOf(charItem) > -1) {
|
|
649
678
|
ret = true;
|
|
650
679
|
}
|
|
680
|
+
|
|
651
681
|
return ret;
|
|
652
682
|
});
|
|
653
683
|
return ret;
|
|
654
684
|
}
|
|
655
|
-
|
|
656
685
|
/**
|
|
657
686
|
* 是否包含非法字符
|
|
658
687
|
*
|
|
@@ -661,12 +690,14 @@
|
|
|
661
690
|
* @param {string} chars 特殊字符
|
|
662
691
|
* @returns {boolean} 是否包含非法字符
|
|
663
692
|
*/
|
|
693
|
+
|
|
694
|
+
|
|
664
695
|
function hasUnallowableCharacter(val, chars) {
|
|
665
696
|
if (!val) {
|
|
666
697
|
return false;
|
|
667
698
|
}
|
|
668
699
|
|
|
669
|
-
|
|
700
|
+
var specialChars = val.replace(regAllNumberAndLetter, '');
|
|
670
701
|
|
|
671
702
|
if (!specialChars) {
|
|
672
703
|
return false;
|
|
@@ -674,20 +705,22 @@
|
|
|
674
705
|
return true;
|
|
675
706
|
}
|
|
676
707
|
|
|
677
|
-
|
|
708
|
+
var regChars = hasHex(chars) ? new RegExp("[^".concat(chars, "]")) : null;
|
|
709
|
+
|
|
678
710
|
if (regChars) {
|
|
679
711
|
return regChars.test(specialChars);
|
|
680
712
|
}
|
|
681
|
-
|
|
682
|
-
|
|
713
|
+
|
|
714
|
+
var ret = false;
|
|
715
|
+
specialChars.split('').some(function (charItem) {
|
|
683
716
|
if (chars.indexOf(charItem) === -1) {
|
|
684
717
|
ret = true;
|
|
685
718
|
}
|
|
719
|
+
|
|
686
720
|
return ret;
|
|
687
721
|
});
|
|
688
722
|
return ret;
|
|
689
723
|
}
|
|
690
|
-
|
|
691
724
|
/**
|
|
692
725
|
* @typedef {Object} PasswordContaines - 验证密码的包含内容
|
|
693
726
|
* @property {boolean} number - 包含数字
|
|
@@ -776,32 +809,41 @@
|
|
|
776
809
|
* }
|
|
777
810
|
* }
|
|
778
811
|
*/
|
|
779
|
-
|
|
780
|
-
|
|
812
|
+
|
|
813
|
+
|
|
814
|
+
function validatePassword(value) {
|
|
815
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
816
|
+
_ref$level = _ref.level,
|
|
817
|
+
level = _ref$level === void 0 ? 2 : _ref$level,
|
|
818
|
+
_ref$ignoreCase = _ref.ignoreCase,
|
|
819
|
+
ignoreCase = _ref$ignoreCase === void 0 ? false : _ref$ignoreCase,
|
|
820
|
+
_ref$special = _ref.special,
|
|
821
|
+
special = _ref$special === void 0 ? '\\x21-\\x2F\\x3A-\\x40\\x5B-\\x60\\x7B-\\x7E' : _ref$special;
|
|
822
|
+
|
|
823
|
+
var valStr = value;
|
|
781
824
|
|
|
782
825
|
if (typeof value !== 'string') {
|
|
783
|
-
devWarn(
|
|
826
|
+
devWarn("[validatePassword] value must be a string.");
|
|
784
827
|
valStr = '';
|
|
785
828
|
}
|
|
786
829
|
|
|
787
|
-
|
|
830
|
+
var currentLevel = 0; // 包含数字
|
|
831
|
+
|
|
832
|
+
var containesNumber = hasNumber(valStr); // 包含小写字母
|
|
833
|
+
|
|
834
|
+
var containesLowerCaseLetter = hasLowerCaseLetter(valStr); // 包含大写字母
|
|
835
|
+
|
|
836
|
+
var containesUpperCaseLetter = hasUpperCaseLetter(valStr); // 包含特殊字符
|
|
788
837
|
|
|
789
|
-
//
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
const containesLowerCaseLetter = hasLowerCaseLetter(valStr);
|
|
793
|
-
// 包含大写字母
|
|
794
|
-
const containesUpperCaseLetter = hasUpperCaseLetter(valStr);
|
|
795
|
-
// 包含特殊字符
|
|
796
|
-
const containesSpecialCharacter = hasSpecialCharacter(valStr, special);
|
|
797
|
-
// 包含非法字符,即含有非数字字母特殊字符以外的其他字符
|
|
798
|
-
const containesUnallowableCharacter = hasUnallowableCharacter(valStr, special);
|
|
838
|
+
var containesSpecialCharacter = hasSpecialCharacter(valStr, special); // 包含非法字符,即含有非数字字母特殊字符以外的其他字符
|
|
839
|
+
|
|
840
|
+
var containesUnallowableCharacter = hasUnallowableCharacter(valStr, special);
|
|
799
841
|
|
|
800
842
|
if (containesNumber) {
|
|
801
843
|
currentLevel += 1;
|
|
802
|
-
}
|
|
844
|
+
} // 不区分大小写
|
|
845
|
+
|
|
803
846
|
|
|
804
|
-
// 不区分大小写
|
|
805
847
|
if (ignoreCase) {
|
|
806
848
|
if (containesLowerCaseLetter || containesUpperCaseLetter) {
|
|
807
849
|
currentLevel += 1;
|
|
@@ -811,6 +853,7 @@
|
|
|
811
853
|
if (containesLowerCaseLetter) {
|
|
812
854
|
currentLevel += 1;
|
|
813
855
|
}
|
|
856
|
+
|
|
814
857
|
if (containesUpperCaseLetter) {
|
|
815
858
|
currentLevel += 1;
|
|
816
859
|
}
|
|
@@ -818,13 +861,12 @@
|
|
|
818
861
|
|
|
819
862
|
if (containesSpecialCharacter) {
|
|
820
863
|
currentLevel += 1;
|
|
821
|
-
}
|
|
864
|
+
} // 验证结果
|
|
822
865
|
|
|
823
|
-
// 验证结果
|
|
824
|
-
const validated = currentLevel >= level && !containesUnallowableCharacter;
|
|
825
866
|
|
|
867
|
+
var validated = currentLevel >= level && !containesUnallowableCharacter;
|
|
826
868
|
return {
|
|
827
|
-
validated,
|
|
869
|
+
validated: validated,
|
|
828
870
|
level: currentLevel,
|
|
829
871
|
containes: {
|
|
830
872
|
number: containesNumber,
|
|
@@ -876,13 +918,24 @@
|
|
|
876
918
|
* isPassword(' _Aa12345678', {level: 3, ignoreCase: true});
|
|
877
919
|
* // => false
|
|
878
920
|
*/
|
|
879
|
-
function isPassword(value, { level = 2, ignoreCase = false, special = '\\x21-\\x2F\\x3A-\\x40\\x5B-\\x60\\x7B-\\x7E' } = {}) {
|
|
880
|
-
return validatePassword(value, { level, ignoreCase, special }).validated;
|
|
881
|
-
}
|
|
882
921
|
|
|
883
|
-
|
|
884
|
-
|
|
922
|
+
function isPassword(value) {
|
|
923
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
924
|
+
_ref$level = _ref.level,
|
|
925
|
+
level = _ref$level === void 0 ? 2 : _ref$level,
|
|
926
|
+
_ref$ignoreCase = _ref.ignoreCase,
|
|
927
|
+
ignoreCase = _ref$ignoreCase === void 0 ? false : _ref$ignoreCase,
|
|
928
|
+
_ref$special = _ref.special,
|
|
929
|
+
special = _ref$special === void 0 ? '\\x21-\\x2F\\x3A-\\x40\\x5B-\\x60\\x7B-\\x7E' : _ref$special;
|
|
930
|
+
|
|
931
|
+
return validatePassword(value, {
|
|
932
|
+
level: level,
|
|
933
|
+
ignoreCase: ignoreCase,
|
|
934
|
+
special: special
|
|
935
|
+
}).validated;
|
|
936
|
+
}
|
|
885
937
|
|
|
938
|
+
var reg$5 = /^((e[\da-z])|(de)|(se)|(pe)|([khm][\da-z]))[\da-z]{7}$/i;
|
|
886
939
|
/**
|
|
887
940
|
* 检测值是否为护照号
|
|
888
941
|
* 支持普通护照(E*)、外交护照(DE)、公务护照(SE)、公务普通护照(PE)、香港特区护照(K/KJ/H*)、澳门特区护照(MA/MB/M*),注意不区分大小写
|
|
@@ -902,47 +955,37 @@
|
|
|
902
955
|
* // => false
|
|
903
956
|
*
|
|
904
957
|
*/
|
|
958
|
+
|
|
905
959
|
function isPassport(value) {
|
|
906
|
-
|
|
960
|
+
var valueStr = normalizeString(value);
|
|
907
961
|
return reg$5.test(valueStr);
|
|
908
962
|
}
|
|
909
963
|
|
|
910
|
-
|
|
964
|
+
var chineseDictionary = {
|
|
911
965
|
// 基本汉字
|
|
912
|
-
chineseBasic:
|
|
913
|
-
|
|
966
|
+
chineseBasic: "[\u4E00-\u9FA5]",
|
|
914
967
|
// 基本汉字补充
|
|
915
|
-
chineseExtend:
|
|
916
|
-
|
|
968
|
+
chineseExtend: "[\u9EA6-\u9FEF]",
|
|
917
969
|
// 汉字扩展A
|
|
918
|
-
chineseExtendA:
|
|
919
|
-
|
|
970
|
+
chineseExtendA: "[\u3400-\u4DB5]",
|
|
920
971
|
// 汉字扩展B
|
|
921
|
-
chineseExtendB:
|
|
922
|
-
|
|
972
|
+
chineseExtendB: "[\uD840\uDC00-\uD869\uDED6]",
|
|
923
973
|
// 汉字扩展C
|
|
924
|
-
chineseExtendC:
|
|
925
|
-
|
|
974
|
+
chineseExtendC: "[\uD869\uDF00-\uD86D\uDF34]",
|
|
926
975
|
// 汉字扩展D
|
|
927
|
-
chineseExtendD:
|
|
928
|
-
|
|
976
|
+
chineseExtendD: "[\uD86D\uDF40-\uD86E\uDC1D]",
|
|
929
977
|
// 汉字扩展E
|
|
930
|
-
chineseExtendE:
|
|
931
|
-
|
|
978
|
+
chineseExtendE: "[\uD86E\uDC20-\uD873\uDEA1]",
|
|
932
979
|
// 汉字扩展F
|
|
933
|
-
chineseExtendF:
|
|
980
|
+
chineseExtendF: "[\uD873\uDEB0-\uD87A\uDFE0]"
|
|
934
981
|
};
|
|
982
|
+
var looseChineseRegExp = chineseDictionary.chineseBasic + '+';
|
|
983
|
+
var chineseRegExp = '^' + chineseDictionary.chineseBasic + '+$';
|
|
984
|
+
var chineseWithExtend = '(?:' + chineseDictionary.chineseBasic + '|' + chineseDictionary.chineseExtend + '|' + chineseDictionary.chineseExtendA + '|' + chineseDictionary.chineseExtendB + '|' + chineseDictionary.chineseExtendC + '|' + chineseDictionary.chineseExtendD + '|' + chineseDictionary.chineseExtendE + '|' + chineseDictionary.chineseExtendF + ')';
|
|
985
|
+
var looseChineseExtendRegExp = chineseWithExtend + '+';
|
|
986
|
+
var chineseExtendRegExp = '^' + chineseWithExtend + '+$'; // eslint-disable-next-line no-prototype-builtins
|
|
935
987
|
|
|
936
|
-
|
|
937
|
-
const chineseRegExp = '^' + chineseDictionary.chineseBasic + '+$';
|
|
938
|
-
|
|
939
|
-
const chineseWithExtend = '(?:' + chineseDictionary.chineseBasic + '|' + chineseDictionary.chineseExtend + '|' + chineseDictionary.chineseExtendA + '|' + chineseDictionary.chineseExtendB + '|' + chineseDictionary.chineseExtendC + '|' + chineseDictionary.chineseExtendD + '|' + chineseDictionary.chineseExtendE + '|' + chineseDictionary.chineseExtendF + ')';
|
|
940
|
-
const looseChineseExtendRegExp = chineseWithExtend + '+';
|
|
941
|
-
const chineseExtendRegExp = '^' + chineseWithExtend + '+$';
|
|
942
|
-
|
|
943
|
-
// eslint-disable-next-line no-prototype-builtins
|
|
944
|
-
const supportRegExpUnicode = RegExp.prototype.hasOwnProperty('unicode');
|
|
945
|
-
|
|
988
|
+
var supportRegExpUnicode = RegExp.prototype.hasOwnProperty('unicode');
|
|
946
989
|
/**
|
|
947
990
|
* 检测值是否为中文
|
|
948
991
|
*
|
|
@@ -979,21 +1022,25 @@
|
|
|
979
1022
|
* isChinese('𠮷aa', { useExtend: true, loose: true });
|
|
980
1023
|
* // => true
|
|
981
1024
|
*/
|
|
982
|
-
function isChinese(value, { loose = false, useExtend = false } = {}) {
|
|
983
|
-
const valueStr = normalizeString(value);
|
|
984
|
-
const basicRegExp = loose ? looseChineseRegExp : chineseRegExp;
|
|
985
|
-
const extendRegExp = loose ? looseChineseExtendRegExp : chineseExtendRegExp;
|
|
986
1025
|
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
1026
|
+
function isChinese(value) {
|
|
1027
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
1028
|
+
_ref$loose = _ref.loose,
|
|
1029
|
+
loose = _ref$loose === void 0 ? false : _ref$loose,
|
|
1030
|
+
_ref$useExtend = _ref.useExtend,
|
|
1031
|
+
useExtend = _ref$useExtend === void 0 ? false : _ref$useExtend;
|
|
1032
|
+
|
|
1033
|
+
var valueStr = normalizeString(value);
|
|
1034
|
+
var basicRegExp = loose ? looseChineseRegExp : chineseRegExp;
|
|
1035
|
+
var extendRegExp = loose ? looseChineseExtendRegExp : chineseExtendRegExp;
|
|
1036
|
+
var hasExtend = useExtend && supportRegExpUnicode;
|
|
1037
|
+
var resultRegExp = hasExtend ? extendRegExp : basicRegExp;
|
|
1038
|
+
var flag = hasExtend ? 'u' : undefined;
|
|
1039
|
+
var reg = new RegExp(resultRegExp, flag);
|
|
991
1040
|
return reg.test(valueStr);
|
|
992
1041
|
}
|
|
993
1042
|
|
|
994
|
-
|
|
995
|
-
const reg$4 = /^((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
|
|
996
|
-
|
|
1043
|
+
var reg$4 = /^((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
|
|
997
1044
|
/**
|
|
998
1045
|
* 检测值是否为ipv4
|
|
999
1046
|
*
|
|
@@ -1017,14 +1064,13 @@
|
|
|
1017
1064
|
* // => false
|
|
1018
1065
|
*
|
|
1019
1066
|
*/
|
|
1067
|
+
|
|
1020
1068
|
function isIPv4(value) {
|
|
1021
|
-
|
|
1069
|
+
var valueStr = normalizeString(value);
|
|
1022
1070
|
return reg$4.test(valueStr);
|
|
1023
1071
|
}
|
|
1024
1072
|
|
|
1025
|
-
|
|
1026
|
-
const reg$3 = /^((([0-9A-F]{1,4}:){7}([0-9A-F]{1,4}|:))|(([0-9A-F]{1,4}:){6}(:[0-9A-F]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|\d{1,2})(\.(25[0-5]|2[0-4]\d|1\d\d|\d{1,2})){3})|:))|(([0-9A-F]{1,4}:){5}(((:[0-9A-F]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|\d{1,2})(\.(25[0-5]|2[0-4]\d|1\d\d|\d{1,2})){3})|:))|(([0-9A-F]{1,4}:){4}(((:[0-9A-F]{1,4}){1,3})|((:[0-9A-F]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|\d{1,2})(\.(25[0-5]|2[0-4]\d|1\d\d|\d{1,2})){3}))|:))|(([0-9A-F]{1,4}:){3}(((:[0-9A-F]{1,4}){1,4})|((:[0-9A-F]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|\d{1,2})(\.(25[0-5]|2[0-4]\d|1\d\d|\d{1,2})){3}))|:))|(([0-9A-F]{1,4}:){2}(((:[0-9A-F]{1,4}){1,5})|((:[0-9A-F]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|\d{1,2})(\.(25[0-5]|2[0-4]\d|1\d\d|\d{1,2})){3}))|:))|(([0-9A-F]{1,4}:){1}(((:[0-9A-F]{1,4}){1,6})|((:[0-9A-F]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|\d{1,2})(\.(25[0-5]|2[0-4]\d|1\d\d|\d{1,2})){3}))|:))|(:(((:[0-9A-F]{1,4}){1,7})|((:[0-9A-F]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|\d{1,2})(\.(25[0-5]|2[0-4]\d|1\d\d|\d{1,2})){3}))|:)))(%.+)?$/i;
|
|
1027
|
-
|
|
1073
|
+
var reg$3 = /^((([0-9A-F]{1,4}:){7}([0-9A-F]{1,4}|:))|(([0-9A-F]{1,4}:){6}(:[0-9A-F]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|\d{1,2})(\.(25[0-5]|2[0-4]\d|1\d\d|\d{1,2})){3})|:))|(([0-9A-F]{1,4}:){5}(((:[0-9A-F]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|\d{1,2})(\.(25[0-5]|2[0-4]\d|1\d\d|\d{1,2})){3})|:))|(([0-9A-F]{1,4}:){4}(((:[0-9A-F]{1,4}){1,3})|((:[0-9A-F]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|\d{1,2})(\.(25[0-5]|2[0-4]\d|1\d\d|\d{1,2})){3}))|:))|(([0-9A-F]{1,4}:){3}(((:[0-9A-F]{1,4}){1,4})|((:[0-9A-F]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|\d{1,2})(\.(25[0-5]|2[0-4]\d|1\d\d|\d{1,2})){3}))|:))|(([0-9A-F]{1,4}:){2}(((:[0-9A-F]{1,4}){1,5})|((:[0-9A-F]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|\d{1,2})(\.(25[0-5]|2[0-4]\d|1\d\d|\d{1,2})){3}))|:))|(([0-9A-F]{1,4}:){1}(((:[0-9A-F]{1,4}){1,6})|((:[0-9A-F]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|\d{1,2})(\.(25[0-5]|2[0-4]\d|1\d\d|\d{1,2})){3}))|:))|(:(((:[0-9A-F]{1,4}){1,7})|((:[0-9A-F]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|\d{1,2})(\.(25[0-5]|2[0-4]\d|1\d\d|\d{1,2})){3}))|:)))(%.+)?$/i;
|
|
1028
1074
|
/**
|
|
1029
1075
|
* 检测值是否为ipv6
|
|
1030
1076
|
*
|
|
@@ -1073,14 +1119,13 @@
|
|
|
1073
1119
|
* // => false
|
|
1074
1120
|
*
|
|
1075
1121
|
*/
|
|
1122
|
+
|
|
1076
1123
|
function isIPv6(value) {
|
|
1077
|
-
|
|
1124
|
+
var valueStr = normalizeString(value);
|
|
1078
1125
|
return reg$3.test(valueStr);
|
|
1079
1126
|
}
|
|
1080
1127
|
|
|
1081
|
-
|
|
1082
|
-
const reg$2 = /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\*\+=&;%@.\w_]*)#?(?:[\w]*))?)$/;
|
|
1083
|
-
|
|
1128
|
+
var reg$2 = /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\*\+=&;%@.\w_]*)#?(?:[\w]*))?)$/;
|
|
1084
1129
|
/**
|
|
1085
1130
|
* 检测值是否为url
|
|
1086
1131
|
*
|
|
@@ -1113,14 +1158,13 @@
|
|
|
1113
1158
|
* isUrl('http://www.example.com/test/123?foo=bar');
|
|
1114
1159
|
* // => true
|
|
1115
1160
|
*/
|
|
1161
|
+
|
|
1116
1162
|
function isUrl(value) {
|
|
1117
|
-
|
|
1163
|
+
var valueStr = normalizeString(value);
|
|
1118
1164
|
return reg$2.test(valueStr);
|
|
1119
1165
|
}
|
|
1120
1166
|
|
|
1121
|
-
|
|
1122
|
-
const baseReg = /^\d{15}$/;
|
|
1123
|
-
|
|
1167
|
+
var baseReg = /^\d{15}$/;
|
|
1124
1168
|
/**
|
|
1125
1169
|
* 计算校验码
|
|
1126
1170
|
*
|
|
@@ -1129,20 +1173,21 @@
|
|
|
1129
1173
|
* @param {string} preCode 营业执照前14位
|
|
1130
1174
|
* @returns {number} 校验码
|
|
1131
1175
|
*/
|
|
1176
|
+
|
|
1132
1177
|
function sumCheckCode(preCode) {
|
|
1133
|
-
|
|
1178
|
+
var retNum; // 校验位数字
|
|
1134
1179
|
|
|
1135
|
-
|
|
1180
|
+
var pj = 10; // Pj+1 11,初始为10
|
|
1136
1181
|
|
|
1137
|
-
for (
|
|
1138
|
-
|
|
1139
|
-
|
|
1182
|
+
for (var j = 0; j < 14; j++) {
|
|
1183
|
+
var sj = pj + Number(preCode[j]);
|
|
1184
|
+
var sj10 = sj % 10;
|
|
1140
1185
|
sj10 = sj10 === 0 ? 10 : sj10;
|
|
1141
|
-
|
|
1186
|
+
var pj1 = sj10 * 2;
|
|
1142
1187
|
pj = pj1 % 11;
|
|
1143
|
-
}
|
|
1188
|
+
} // 反模10计算
|
|
1189
|
+
|
|
1144
1190
|
|
|
1145
|
-
// 反模10计算
|
|
1146
1191
|
if (pj === 1) {
|
|
1147
1192
|
retNum = 0;
|
|
1148
1193
|
} else {
|
|
@@ -1151,7 +1196,6 @@
|
|
|
1151
1196
|
|
|
1152
1197
|
return retNum;
|
|
1153
1198
|
}
|
|
1154
|
-
|
|
1155
1199
|
/**
|
|
1156
1200
|
* 检测值是否为营业执照号,也叫工商注册号。由14位数字本体码和1位数字校验码组成,其中本体码从左至右依次为:6位首次登记机关码、8位顺序码。
|
|
1157
1201
|
*
|
|
@@ -1177,30 +1221,241 @@
|
|
|
1177
1221
|
* isBusinessLicense('31011560098', { checkCode: false });
|
|
1178
1222
|
* // => false
|
|
1179
1223
|
*/
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1224
|
+
|
|
1225
|
+
|
|
1226
|
+
function isBusinessLicense(value) {
|
|
1227
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
1228
|
+
var valueStr = normalizeString(value); // @ts-ignore
|
|
1183
1229
|
// TODO 下个版本废弃 loose
|
|
1184
|
-
const { loose = false, checkCode: cc = true } = options;
|
|
1185
|
-
const needCheckCode = !loose && cc;
|
|
1186
1230
|
|
|
1187
|
-
|
|
1231
|
+
var _options$loose = options.loose,
|
|
1232
|
+
loose = _options$loose === void 0 ? false : _options$loose,
|
|
1233
|
+
_options$checkCode = options.checkCode,
|
|
1234
|
+
cc = _options$checkCode === void 0 ? true : _options$checkCode;
|
|
1235
|
+
var needCheckCode = !loose && cc;
|
|
1236
|
+
var passBaseRule = baseReg.test(valueStr); // 宽松模式 或 基础规则不通过直接返回
|
|
1188
1237
|
|
|
1189
|
-
// 宽松模式 或 基础规则不通过直接返回
|
|
1190
1238
|
if (!needCheckCode || !passBaseRule) {
|
|
1191
1239
|
return passBaseRule;
|
|
1192
|
-
}
|
|
1240
|
+
} // 前14位
|
|
1241
|
+
|
|
1193
1242
|
|
|
1194
|
-
//
|
|
1195
|
-
const preCode = valueStr.substring(0, 14);
|
|
1196
|
-
// 校验码
|
|
1197
|
-
const lastCode = valueStr.substring(valueStr.length - 1);
|
|
1198
|
-
// 计算校验码
|
|
1199
|
-
const checkCode = sumCheckCode(preCode);
|
|
1243
|
+
var preCode = valueStr.substring(0, 14); // 校验码
|
|
1200
1244
|
|
|
1245
|
+
var lastCode = valueStr.substring(valueStr.length - 1); // 计算校验码
|
|
1246
|
+
|
|
1247
|
+
var checkCode = sumCheckCode(preCode);
|
|
1201
1248
|
return lastCode === String(checkCode);
|
|
1202
1249
|
}
|
|
1203
1250
|
|
|
1251
|
+
function _typeof(obj) {
|
|
1252
|
+
"@babel/helpers - typeof";
|
|
1253
|
+
|
|
1254
|
+
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
|
|
1255
|
+
_typeof = function (obj) {
|
|
1256
|
+
return typeof obj;
|
|
1257
|
+
};
|
|
1258
|
+
} else {
|
|
1259
|
+
_typeof = function (obj) {
|
|
1260
|
+
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
1261
|
+
};
|
|
1262
|
+
}
|
|
1263
|
+
|
|
1264
|
+
return _typeof(obj);
|
|
1265
|
+
}
|
|
1266
|
+
|
|
1267
|
+
function _wrapRegExp() {
|
|
1268
|
+
_wrapRegExp = function (re, groups) {
|
|
1269
|
+
return new BabelRegExp(re, undefined, groups);
|
|
1270
|
+
};
|
|
1271
|
+
|
|
1272
|
+
var _super = RegExp.prototype;
|
|
1273
|
+
|
|
1274
|
+
var _groups = new WeakMap();
|
|
1275
|
+
|
|
1276
|
+
function BabelRegExp(re, flags, groups) {
|
|
1277
|
+
var _this = new RegExp(re, flags);
|
|
1278
|
+
|
|
1279
|
+
_groups.set(_this, groups || _groups.get(re));
|
|
1280
|
+
|
|
1281
|
+
return _setPrototypeOf(_this, BabelRegExp.prototype);
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1284
|
+
_inherits(BabelRegExp, RegExp);
|
|
1285
|
+
|
|
1286
|
+
BabelRegExp.prototype.exec = function (str) {
|
|
1287
|
+
var result = _super.exec.call(this, str);
|
|
1288
|
+
|
|
1289
|
+
if (result) result.groups = buildGroups(result, this);
|
|
1290
|
+
return result;
|
|
1291
|
+
};
|
|
1292
|
+
|
|
1293
|
+
BabelRegExp.prototype[Symbol.replace] = function (str, substitution) {
|
|
1294
|
+
if (typeof substitution === "string") {
|
|
1295
|
+
var groups = _groups.get(this);
|
|
1296
|
+
|
|
1297
|
+
return _super[Symbol.replace].call(this, str, substitution.replace(/\$<([^>]+)>/g, function (_, name) {
|
|
1298
|
+
return "$" + groups[name];
|
|
1299
|
+
}));
|
|
1300
|
+
} else if (typeof substitution === "function") {
|
|
1301
|
+
var _this = this;
|
|
1302
|
+
|
|
1303
|
+
return _super[Symbol.replace].call(this, str, function () {
|
|
1304
|
+
var args = arguments;
|
|
1305
|
+
|
|
1306
|
+
if (typeof args[args.length - 1] !== "object") {
|
|
1307
|
+
args = [].slice.call(args);
|
|
1308
|
+
args.push(buildGroups(args, _this));
|
|
1309
|
+
}
|
|
1310
|
+
|
|
1311
|
+
return substitution.apply(this, args);
|
|
1312
|
+
});
|
|
1313
|
+
} else {
|
|
1314
|
+
return _super[Symbol.replace].call(this, str, substitution);
|
|
1315
|
+
}
|
|
1316
|
+
};
|
|
1317
|
+
|
|
1318
|
+
function buildGroups(result, re) {
|
|
1319
|
+
var g = _groups.get(re);
|
|
1320
|
+
|
|
1321
|
+
return Object.keys(g).reduce(function (groups, name) {
|
|
1322
|
+
groups[name] = result[g[name]];
|
|
1323
|
+
return groups;
|
|
1324
|
+
}, Object.create(null));
|
|
1325
|
+
}
|
|
1326
|
+
|
|
1327
|
+
return _wrapRegExp.apply(this, arguments);
|
|
1328
|
+
}
|
|
1329
|
+
|
|
1330
|
+
function _inherits(subClass, superClass) {
|
|
1331
|
+
if (typeof superClass !== "function" && superClass !== null) {
|
|
1332
|
+
throw new TypeError("Super expression must either be null or a function");
|
|
1333
|
+
}
|
|
1334
|
+
|
|
1335
|
+
subClass.prototype = Object.create(superClass && superClass.prototype, {
|
|
1336
|
+
constructor: {
|
|
1337
|
+
value: subClass,
|
|
1338
|
+
writable: true,
|
|
1339
|
+
configurable: true
|
|
1340
|
+
}
|
|
1341
|
+
});
|
|
1342
|
+
if (superClass) _setPrototypeOf(subClass, superClass);
|
|
1343
|
+
}
|
|
1344
|
+
|
|
1345
|
+
function _setPrototypeOf(o, p) {
|
|
1346
|
+
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
|
|
1347
|
+
o.__proto__ = p;
|
|
1348
|
+
return o;
|
|
1349
|
+
};
|
|
1350
|
+
|
|
1351
|
+
return _setPrototypeOf(o, p);
|
|
1352
|
+
}
|
|
1353
|
+
|
|
1354
|
+
function _isNativeReflectConstruct() {
|
|
1355
|
+
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
|
|
1356
|
+
if (Reflect.construct.sham) return false;
|
|
1357
|
+
if (typeof Proxy === "function") return true;
|
|
1358
|
+
|
|
1359
|
+
try {
|
|
1360
|
+
Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
|
|
1361
|
+
return true;
|
|
1362
|
+
} catch (e) {
|
|
1363
|
+
return false;
|
|
1364
|
+
}
|
|
1365
|
+
}
|
|
1366
|
+
|
|
1367
|
+
function _construct(Parent, args, Class) {
|
|
1368
|
+
if (_isNativeReflectConstruct()) {
|
|
1369
|
+
_construct = Reflect.construct;
|
|
1370
|
+
} else {
|
|
1371
|
+
_construct = function _construct(Parent, args, Class) {
|
|
1372
|
+
var a = [null];
|
|
1373
|
+
a.push.apply(a, args);
|
|
1374
|
+
var Constructor = Function.bind.apply(Parent, a);
|
|
1375
|
+
var instance = new Constructor();
|
|
1376
|
+
if (Class) _setPrototypeOf(instance, Class.prototype);
|
|
1377
|
+
return instance;
|
|
1378
|
+
};
|
|
1379
|
+
}
|
|
1380
|
+
|
|
1381
|
+
return _construct.apply(null, arguments);
|
|
1382
|
+
}
|
|
1383
|
+
|
|
1384
|
+
function _slicedToArray(arr, i) {
|
|
1385
|
+
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
|
|
1386
|
+
}
|
|
1387
|
+
|
|
1388
|
+
function _toConsumableArray(arr) {
|
|
1389
|
+
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
|
|
1390
|
+
}
|
|
1391
|
+
|
|
1392
|
+
function _arrayWithoutHoles(arr) {
|
|
1393
|
+
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
|
|
1394
|
+
}
|
|
1395
|
+
|
|
1396
|
+
function _arrayWithHoles(arr) {
|
|
1397
|
+
if (Array.isArray(arr)) return arr;
|
|
1398
|
+
}
|
|
1399
|
+
|
|
1400
|
+
function _iterableToArray(iter) {
|
|
1401
|
+
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
1402
|
+
}
|
|
1403
|
+
|
|
1404
|
+
function _iterableToArrayLimit(arr, i) {
|
|
1405
|
+
var _i = arr && (typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]);
|
|
1406
|
+
|
|
1407
|
+
if (_i == null) return;
|
|
1408
|
+
var _arr = [];
|
|
1409
|
+
var _n = true;
|
|
1410
|
+
var _d = false;
|
|
1411
|
+
|
|
1412
|
+
var _s, _e;
|
|
1413
|
+
|
|
1414
|
+
try {
|
|
1415
|
+
for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
|
|
1416
|
+
_arr.push(_s.value);
|
|
1417
|
+
|
|
1418
|
+
if (i && _arr.length === i) break;
|
|
1419
|
+
}
|
|
1420
|
+
} catch (err) {
|
|
1421
|
+
_d = true;
|
|
1422
|
+
_e = err;
|
|
1423
|
+
} finally {
|
|
1424
|
+
try {
|
|
1425
|
+
if (!_n && _i["return"] != null) _i["return"]();
|
|
1426
|
+
} finally {
|
|
1427
|
+
if (_d) throw _e;
|
|
1428
|
+
}
|
|
1429
|
+
}
|
|
1430
|
+
|
|
1431
|
+
return _arr;
|
|
1432
|
+
}
|
|
1433
|
+
|
|
1434
|
+
function _unsupportedIterableToArray(o, minLen) {
|
|
1435
|
+
if (!o) return;
|
|
1436
|
+
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
1437
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
1438
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
1439
|
+
if (n === "Map" || n === "Set") return Array.from(o);
|
|
1440
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
1441
|
+
}
|
|
1442
|
+
|
|
1443
|
+
function _arrayLikeToArray(arr, len) {
|
|
1444
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
1445
|
+
|
|
1446
|
+
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
|
1447
|
+
|
|
1448
|
+
return arr2;
|
|
1449
|
+
}
|
|
1450
|
+
|
|
1451
|
+
function _nonIterableSpread() {
|
|
1452
|
+
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
1453
|
+
}
|
|
1454
|
+
|
|
1455
|
+
function _nonIterableRest() {
|
|
1456
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
1457
|
+
}
|
|
1458
|
+
|
|
1204
1459
|
/**
|
|
1205
1460
|
* 检测值是否类似Promise对象
|
|
1206
1461
|
*
|
|
@@ -1221,12 +1476,10 @@
|
|
|
1221
1476
|
* => true
|
|
1222
1477
|
*/
|
|
1223
1478
|
function isPromiseLike(obj) {
|
|
1224
|
-
return obj !== null && (
|
|
1479
|
+
return obj !== null && (_typeof(obj) === 'object' || typeof obj === 'function') && typeof obj.then === 'function';
|
|
1225
1480
|
}
|
|
1226
1481
|
|
|
1227
|
-
|
|
1228
|
-
const regHMCard = /^[hm]{1}([0-9]{10}|[0-9]{8})$/i;
|
|
1229
|
-
|
|
1482
|
+
var regHMCard = /^[hm]{1}([0-9]{10}|[0-9]{8})$/i;
|
|
1230
1483
|
/**
|
|
1231
1484
|
* 检测值是否为港澳居民来往内地通行证,俗称回乡证或回乡卡。
|
|
1232
1485
|
*
|
|
@@ -1249,17 +1502,15 @@
|
|
|
1249
1502
|
* isHMCard('m32031177') // true
|
|
1250
1503
|
* isHMCard('M32031177') // true
|
|
1251
1504
|
*/
|
|
1505
|
+
|
|
1252
1506
|
function isHMCard(value) {
|
|
1253
|
-
|
|
1507
|
+
var valueStr = normalizeString(value);
|
|
1254
1508
|
return regHMCard.test(valueStr);
|
|
1255
1509
|
}
|
|
1256
1510
|
|
|
1257
|
-
//
|
|
1258
|
-
const regTWCard = /^\d{8}$/i;
|
|
1259
|
-
|
|
1260
|
-
// 一次性短期台胞证
|
|
1261
|
-
const singleRegTWCard = /^[\da-z]{10,12}$/i;
|
|
1511
|
+
var regTWCard = /^\d{8}$/i; // 一次性短期台胞证
|
|
1262
1512
|
|
|
1513
|
+
var singleRegTWCard = /^[\da-z]{10,12}$/i;
|
|
1263
1514
|
/**
|
|
1264
1515
|
* 检测值是否为台湾居民来往大陆通行证,俗称台胞证。
|
|
1265
1516
|
*
|
|
@@ -1279,16 +1530,22 @@
|
|
|
1279
1530
|
* isTWCard('F290299977') // false
|
|
1280
1531
|
* isTWCard('F290299977', { loose: true }) // true
|
|
1281
1532
|
*/
|
|
1282
|
-
|
|
1283
|
-
|
|
1533
|
+
|
|
1534
|
+
function isTWCard(value) {
|
|
1535
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
1536
|
+
_ref$loose = _ref.loose,
|
|
1537
|
+
loose = _ref$loose === void 0 ? false : _ref$loose;
|
|
1538
|
+
|
|
1539
|
+
var valueStr = normalizeString(value);
|
|
1540
|
+
|
|
1284
1541
|
if (regTWCard.test(valueStr)) {
|
|
1285
1542
|
return true;
|
|
1286
1543
|
}
|
|
1544
|
+
|
|
1287
1545
|
return loose ? singleRegTWCard.test(valueStr) : false;
|
|
1288
1546
|
}
|
|
1289
1547
|
|
|
1290
|
-
|
|
1291
|
-
|
|
1548
|
+
var reg$1 = /^[A-Z]{6}[A-Z\d]{2}(?:[A-Z\d]{3})?$/;
|
|
1292
1549
|
/**
|
|
1293
1550
|
* 检测值是否为 Swift Code。8位或11位,前6位为大写字母,7-8位为大写字母或数字,9-11位为可选的大写字母或数字。
|
|
1294
1551
|
*
|
|
@@ -1309,15 +1566,67 @@
|
|
|
1309
1566
|
* isSwiftCode('ICBKCNBJBJM') // true
|
|
1310
1567
|
*
|
|
1311
1568
|
*/
|
|
1569
|
+
|
|
1312
1570
|
function isSwiftCode(value) {
|
|
1313
|
-
|
|
1571
|
+
var valueStr = normalizeString(value);
|
|
1314
1572
|
return reg$1.test(valueStr);
|
|
1315
1573
|
}
|
|
1316
1574
|
|
|
1317
1575
|
// 最大安全数字
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1576
|
+
var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991; // 最小安全数字
|
|
1577
|
+
|
|
1578
|
+
var MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;
|
|
1579
|
+
|
|
1580
|
+
/**
|
|
1581
|
+
* 检查值是否为NaN
|
|
1582
|
+
*
|
|
1583
|
+
* @static
|
|
1584
|
+
* @alias module:Type.isNaN
|
|
1585
|
+
* @since 1.1.0
|
|
1586
|
+
* @param {*} value 检查值
|
|
1587
|
+
* @returns {boolean} 是否为NaN
|
|
1588
|
+
* @example
|
|
1589
|
+
*
|
|
1590
|
+
* isNaN(NaN)
|
|
1591
|
+
* // => true
|
|
1592
|
+
*
|
|
1593
|
+
* isNaN(1)
|
|
1594
|
+
* // => false
|
|
1595
|
+
*/
|
|
1596
|
+
|
|
1597
|
+
function _isNaN(value) {
|
|
1598
|
+
return isType(value, 'Number') && isNaN(value);
|
|
1599
|
+
}
|
|
1600
|
+
|
|
1601
|
+
/**
|
|
1602
|
+
* 检查值是否为Number
|
|
1603
|
+
*
|
|
1604
|
+
* @static
|
|
1605
|
+
* @alias module:Type.isNumber
|
|
1606
|
+
* @since 1.1.0
|
|
1607
|
+
* @param {*} value 检查值
|
|
1608
|
+
* @returns {boolean} 是否为Number
|
|
1609
|
+
* @example
|
|
1610
|
+
*
|
|
1611
|
+
* isNumber(1)
|
|
1612
|
+
* // => true
|
|
1613
|
+
*
|
|
1614
|
+
* isNumber(Number.MIN_VALUE)
|
|
1615
|
+
* // => true
|
|
1616
|
+
*
|
|
1617
|
+
* isNumber(Infinity)
|
|
1618
|
+
* // => true
|
|
1619
|
+
*
|
|
1620
|
+
* isNumber(NaN)
|
|
1621
|
+
* // => true
|
|
1622
|
+
*
|
|
1623
|
+
* isNumber('1')
|
|
1624
|
+
* // => false
|
|
1625
|
+
*/
|
|
1626
|
+
|
|
1627
|
+
function isNumber(value) {
|
|
1628
|
+
return isType(value, 'Number');
|
|
1629
|
+
}
|
|
1321
1630
|
|
|
1322
1631
|
/**
|
|
1323
1632
|
* 参考: https://github.com/nefe/number-precision/blob/master/src/index.ts
|
|
@@ -1325,17 +1634,45 @@
|
|
|
1325
1634
|
* 解决浮动运算问题,避免小数点后产生多位数和计算精度损失。
|
|
1326
1635
|
* 问题示例:2.3 + 2.4 = 4.699999999999999,1.0 - 0.9 = 0.09999999999999998
|
|
1327
1636
|
*/
|
|
1637
|
+
/**
|
|
1638
|
+
* 值是否为有效的数值
|
|
1639
|
+
*
|
|
1640
|
+
* @param {*} value 待检测的值
|
|
1641
|
+
* @returns {boolean} 是否为有效的数值
|
|
1642
|
+
*/
|
|
1643
|
+
|
|
1644
|
+
function isEffectiveNumeric(value) {
|
|
1645
|
+
if (isNumber(value) && !isNaN(value)) {
|
|
1646
|
+
return true;
|
|
1647
|
+
} // 避免空字符串 或 带空格的字符串
|
|
1648
|
+
|
|
1649
|
+
|
|
1650
|
+
if (isString(value)) {
|
|
1651
|
+
var fmtStrValue = value.trim(); // 带空格的字符串也不转换数字
|
|
1652
|
+
// Number(' ') => 0
|
|
1328
1653
|
|
|
1654
|
+
if (fmtStrValue === value) {
|
|
1655
|
+
var numValue = fmtStrValue ? Number(fmtStrValue) : NaN;
|
|
1656
|
+
|
|
1657
|
+
if (isNumber(numValue) && !isNaN(numValue)) {
|
|
1658
|
+
return true;
|
|
1659
|
+
}
|
|
1660
|
+
}
|
|
1661
|
+
}
|
|
1662
|
+
|
|
1663
|
+
devWarn("".concat(value, " is not a valid number."));
|
|
1664
|
+
return false;
|
|
1665
|
+
}
|
|
1329
1666
|
/**
|
|
1330
1667
|
* 是否为科学计数法数字
|
|
1331
1668
|
*
|
|
1332
1669
|
* @param {string} num 检查值
|
|
1333
1670
|
* @returns {boolean}
|
|
1334
1671
|
*/
|
|
1672
|
+
|
|
1335
1673
|
function isScientificNumber(num) {
|
|
1336
1674
|
return /\d+\.?\d*e[\+\-]*\d+/i.test(num);
|
|
1337
1675
|
}
|
|
1338
|
-
|
|
1339
1676
|
/**
|
|
1340
1677
|
* 把错误的数据转正
|
|
1341
1678
|
*
|
|
@@ -1346,60 +1683,63 @@
|
|
|
1346
1683
|
*
|
|
1347
1684
|
* strip(0.09999999999999998)=0.1
|
|
1348
1685
|
*/
|
|
1349
|
-
|
|
1686
|
+
|
|
1687
|
+
function strip(num) {
|
|
1688
|
+
var precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 12;
|
|
1350
1689
|
return +parseFloat(num.toPrecision(precision));
|
|
1351
1690
|
}
|
|
1352
|
-
|
|
1353
1691
|
/**
|
|
1354
1692
|
* 计算数字的小数点长度,支持科学记数法
|
|
1355
1693
|
*
|
|
1356
1694
|
* @param {number|string} num 输入数
|
|
1357
1695
|
* @returns {number} 小数点长度
|
|
1358
1696
|
*/
|
|
1697
|
+
|
|
1359
1698
|
function digitLength(num) {
|
|
1360
1699
|
// Get digit length of e
|
|
1361
|
-
|
|
1362
|
-
|
|
1700
|
+
var eSplit = num.toString().split(/e/i);
|
|
1701
|
+
var len = (eSplit[0].split('.')[1] || '').length - +(eSplit[1] || 0);
|
|
1363
1702
|
return len > 0 ? len : 0;
|
|
1364
1703
|
}
|
|
1365
|
-
|
|
1366
1704
|
/**
|
|
1367
1705
|
* 把小数转成整数,支持科学计数法。如果是小数则放大成整数
|
|
1368
1706
|
*
|
|
1369
1707
|
* @param {number|string} num 输入数
|
|
1370
1708
|
* @returns {number}
|
|
1371
1709
|
*/
|
|
1710
|
+
|
|
1372
1711
|
function float2Fixed(num) {
|
|
1373
|
-
|
|
1712
|
+
var strNum = String(num);
|
|
1713
|
+
|
|
1374
1714
|
if (!isScientificNumber(strNum)) {
|
|
1375
1715
|
return Number(strNum.replace('.', ''));
|
|
1376
1716
|
}
|
|
1377
|
-
|
|
1717
|
+
|
|
1718
|
+
var dLen = digitLength(num);
|
|
1378
1719
|
return dLen > 0 ? strip(+num * Math.pow(10, dLen)) : +num;
|
|
1379
1720
|
}
|
|
1380
|
-
|
|
1381
1721
|
/**
|
|
1382
1722
|
* 检测数字是否越界,如果越界给出提示
|
|
1383
1723
|
* @param {number} num 输入数
|
|
1384
1724
|
* @returns
|
|
1385
1725
|
*/
|
|
1726
|
+
|
|
1386
1727
|
function checkBoundary(num) {
|
|
1387
1728
|
if (+num > MAX_SAFE_INTEGER || +num < MIN_SAFE_INTEGER) {
|
|
1388
|
-
devWarn(
|
|
1729
|
+
devWarn("".concat(num, " is beyond boundary when transfer to integer, the results may not be accurate"));
|
|
1389
1730
|
}
|
|
1390
1731
|
}
|
|
1391
|
-
|
|
1392
1732
|
/**
|
|
1393
1733
|
* 去掉左边数字0
|
|
1394
1734
|
*
|
|
1395
1735
|
* @param {string} num 数字字符串
|
|
1396
1736
|
* @returns {string}
|
|
1397
1737
|
*/
|
|
1398
|
-
function trimLeftZero(num) {
|
|
1399
|
-
const reg = /^([+-])?(0+)([0-9\.]+)$/;
|
|
1400
|
-
const result = reg.exec(num);
|
|
1401
1738
|
|
|
1402
|
-
|
|
1739
|
+
function trimLeftZero(num) {
|
|
1740
|
+
var reg = /^([+-])?(0+)([0-9\.]+)$/;
|
|
1741
|
+
var result = reg.exec(num);
|
|
1742
|
+
var sign;
|
|
1403
1743
|
|
|
1404
1744
|
if (result) {
|
|
1405
1745
|
sign = result[1] || '';
|
|
@@ -1408,7 +1748,6 @@
|
|
|
1408
1748
|
|
|
1409
1749
|
return num;
|
|
1410
1750
|
}
|
|
1411
|
-
|
|
1412
1751
|
/**
|
|
1413
1752
|
* 科学计数法转换成普通数字
|
|
1414
1753
|
*
|
|
@@ -1419,39 +1758,40 @@
|
|
|
1419
1758
|
* @param {string | number} num 科学计数法数字
|
|
1420
1759
|
* @returns {string | number} 转换后的数字字符串
|
|
1421
1760
|
*/
|
|
1761
|
+
|
|
1422
1762
|
function scientificToNumber(num) {
|
|
1423
|
-
|
|
1763
|
+
var strNum = String(num);
|
|
1424
1764
|
|
|
1425
1765
|
if (!isScientificNumber(strNum)) {
|
|
1426
1766
|
return num;
|
|
1427
1767
|
}
|
|
1428
|
-
|
|
1429
1768
|
/** @type string */
|
|
1430
|
-
let ret;
|
|
1431
1769
|
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1770
|
+
|
|
1771
|
+
var ret;
|
|
1772
|
+
var zero = '0';
|
|
1773
|
+
var parts = strNum.toLowerCase().split('e');
|
|
1774
|
+
var e = parts.pop(); // 存储指数
|
|
1435
1775
|
// @ts-ignore
|
|
1436
|
-
|
|
1776
|
+
|
|
1777
|
+
var l = Math.abs(e); // 取绝对值,l-1就是0的个数
|
|
1437
1778
|
// @ts-ignore
|
|
1438
|
-
const sign = e / l; //判断正负
|
|
1439
|
-
const coeff_array = parts[0].split('.'); // 将系数按照小数点拆分
|
|
1440
1779
|
|
|
1780
|
+
var sign = e / l; //判断正负
|
|
1781
|
+
|
|
1782
|
+
var coeff_array = parts[0].split('.'); // 将系数按照小数点拆分
|
|
1441
1783
|
// 如果是小数
|
|
1784
|
+
|
|
1442
1785
|
if (sign === -1) {
|
|
1443
1786
|
// 整数部分
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
// 整数部分大于科学计数后面部分
|
|
1787
|
+
var intVal = trimLeftZero(coeff_array[0]); // 整数部分大于科学计数后面部分
|
|
1447
1788
|
// 如: 10e-1, 10.2e-1
|
|
1448
|
-
if (intVal.length > l) {
|
|
1449
|
-
const thanLen = intVal.length - l;
|
|
1450
|
-
const dec = coeff_array[1] || '';
|
|
1451
1789
|
|
|
1452
|
-
|
|
1790
|
+
if (intVal.length > l) {
|
|
1791
|
+
var thanLen = intVal.length - l;
|
|
1792
|
+
var dec = coeff_array[1] || '';
|
|
1793
|
+
ret = intVal.slice(0, thanLen); // 处理 10e-1, 100e-1
|
|
1453
1794
|
|
|
1454
|
-
// 处理 10e-1, 100e-1
|
|
1455
1795
|
if (intVal.slice(thanLen) !== '0' || dec) {
|
|
1456
1796
|
ret += '.' + intVal.slice(thanLen) + dec;
|
|
1457
1797
|
}
|
|
@@ -1462,42 +1802,21 @@
|
|
|
1462
1802
|
}
|
|
1463
1803
|
} else {
|
|
1464
1804
|
// 小数部分
|
|
1465
|
-
|
|
1805
|
+
var _dec = coeff_array[1] || ''; // 如果是整数,将整数除第一位之外的非零数字计入位数,相应的减少0的个数
|
|
1806
|
+
|
|
1466
1807
|
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
ret = trimLeftZero(coeff_array[0] + dec.substring(0, l)) + '.' + dec.substring(l);
|
|
1808
|
+
if (l - _dec.length < 0) {
|
|
1809
|
+
ret = trimLeftZero(coeff_array[0] + _dec.substring(0, l)) + '.' + _dec.substring(l);
|
|
1470
1810
|
} else {
|
|
1471
1811
|
// 拼接字符串,如果是整数,不需要拼接小数点
|
|
1472
|
-
ret = coeff_array.join('') + new Array(l -
|
|
1812
|
+
ret = coeff_array.join('') + new Array(l - _dec.length + 1).join(zero);
|
|
1473
1813
|
}
|
|
1474
1814
|
}
|
|
1475
1815
|
|
|
1476
1816
|
return trimLeftZero(ret);
|
|
1477
1817
|
}
|
|
1478
1818
|
|
|
1479
|
-
|
|
1480
|
-
* 检查值是否为NaN
|
|
1481
|
-
*
|
|
1482
|
-
* @static
|
|
1483
|
-
* @alias module:Type.isNaN
|
|
1484
|
-
* @since 1.1.0
|
|
1485
|
-
* @param {*} value 检查值
|
|
1486
|
-
* @returns {boolean} 是否为NaN
|
|
1487
|
-
* @example
|
|
1488
|
-
*
|
|
1489
|
-
* isNaN(NaN)
|
|
1490
|
-
* // => true
|
|
1491
|
-
*
|
|
1492
|
-
* isNaN(1)
|
|
1493
|
-
* // => false
|
|
1494
|
-
*/
|
|
1495
|
-
function _isNaN(value) {
|
|
1496
|
-
return isType(value, 'Number') && isNaN(value);
|
|
1497
|
-
}
|
|
1498
|
-
|
|
1499
|
-
const reg = /^[+-]?\d*\.?\d*$/;
|
|
1500
|
-
|
|
1819
|
+
var reg = /^[+-]?\d*\.?\d*$/;
|
|
1501
1820
|
/**
|
|
1502
1821
|
* 检查数字或数字字符串
|
|
1503
1822
|
*
|
|
@@ -1505,22 +1824,21 @@
|
|
|
1505
1824
|
* @param {string} num
|
|
1506
1825
|
* @returns 是否为数字
|
|
1507
1826
|
*/
|
|
1508
|
-
function checkNumber(num) {
|
|
1509
|
-
if (!(reg.test(num) || isScientificNumber(num)) || _isNaN(num) || (typeof num !== 'number' && typeof num !== 'string') || num === '') {
|
|
1510
|
-
devWarn(`${num} invalid parameter.`);
|
|
1511
1827
|
|
|
1828
|
+
function checkNumber(num) {
|
|
1829
|
+
if (!(reg.test(num) || isScientificNumber(num)) || _isNaN(num) || typeof num !== 'number' && typeof num !== 'string' || num === '') {
|
|
1830
|
+
devWarn("".concat(num, " invalid parameter."));
|
|
1512
1831
|
return false;
|
|
1513
|
-
}
|
|
1514
|
-
|
|
1515
|
-
// 数字超限如果不是是字符串,可能有异常
|
|
1832
|
+
} // 数字超限如果不是是字符串,可能有异常
|
|
1516
1833
|
// 如 1111111111111111111111 // => 1.1111111111111111e+21
|
|
1834
|
+
|
|
1835
|
+
|
|
1517
1836
|
if (typeof num === 'number') {
|
|
1518
1837
|
checkBoundary(num);
|
|
1519
1838
|
}
|
|
1520
1839
|
|
|
1521
1840
|
return true;
|
|
1522
1841
|
}
|
|
1523
|
-
|
|
1524
1842
|
/**
|
|
1525
1843
|
* 格式化整数部分
|
|
1526
1844
|
*
|
|
@@ -1529,20 +1847,22 @@
|
|
|
1529
1847
|
* @param {string} thousand 千分位符号
|
|
1530
1848
|
* @returns 格式化后的值
|
|
1531
1849
|
*/
|
|
1850
|
+
|
|
1851
|
+
|
|
1532
1852
|
function formatInt(intStr, thousand) {
|
|
1533
|
-
|
|
1853
|
+
var txt = '';
|
|
1534
1854
|
intStr = trimLeftZero(intStr);
|
|
1535
1855
|
intStr = intStr[0] === '+' ? intStr.substring(1) : intStr; // 去掉+符号
|
|
1536
|
-
const negativeSymbol = Number(intStr) < 0 ? '-' : '';
|
|
1537
|
-
const reArr = negativeSymbol ? intStr.substring(1).split('').reverse() : intStr.split('').reverse();
|
|
1538
1856
|
|
|
1539
|
-
|
|
1857
|
+
var negativeSymbol = Number(intStr) < 0 ? '-' : '';
|
|
1858
|
+
var reArr = negativeSymbol ? intStr.substring(1).split('').reverse() : intStr.split('').reverse();
|
|
1859
|
+
|
|
1860
|
+
for (var i = 0; i < reArr.length; i++) {
|
|
1540
1861
|
txt += reArr[i] + ((i + 1) % 3 === 0 && i + 1 !== reArr.length ? thousand : '');
|
|
1541
1862
|
}
|
|
1542
1863
|
|
|
1543
1864
|
return negativeSymbol + txt.split('').reverse().join('');
|
|
1544
1865
|
}
|
|
1545
|
-
|
|
1546
1866
|
/**
|
|
1547
1867
|
* 格式化小数部分,如果使用 toFixed,超大额数字会自动被截断
|
|
1548
1868
|
*
|
|
@@ -1552,16 +1872,18 @@
|
|
|
1552
1872
|
* @param {string} decimal 小数点符号
|
|
1553
1873
|
* @returns 格式化后的值
|
|
1554
1874
|
*/
|
|
1875
|
+
|
|
1876
|
+
|
|
1555
1877
|
function formatDec(decStr, precision, decimal) {
|
|
1556
1878
|
if (precision === 0) {
|
|
1557
1879
|
return '';
|
|
1558
1880
|
}
|
|
1559
1881
|
|
|
1560
|
-
|
|
1561
|
-
|
|
1882
|
+
var zero = 0;
|
|
1883
|
+
var ret = '';
|
|
1562
1884
|
|
|
1563
1885
|
if (decStr && Number(decStr) > 0) {
|
|
1564
|
-
|
|
1886
|
+
var tmpNum = parseFloat('0.' + decStr);
|
|
1565
1887
|
ret = tmpNum.toFixed(precision).substring(2);
|
|
1566
1888
|
} else {
|
|
1567
1889
|
ret = zero.toFixed(precision).substring(2);
|
|
@@ -1569,7 +1891,6 @@
|
|
|
1569
1891
|
|
|
1570
1892
|
return decimal + ret;
|
|
1571
1893
|
}
|
|
1572
|
-
|
|
1573
1894
|
/**
|
|
1574
1895
|
* 格式化金额
|
|
1575
1896
|
*
|
|
@@ -1613,27 +1934,41 @@
|
|
|
1613
1934
|
* formatMoney(1000.00, { decimal: '&' });
|
|
1614
1935
|
* // => 1,000&00
|
|
1615
1936
|
*/
|
|
1616
|
-
|
|
1937
|
+
|
|
1938
|
+
|
|
1939
|
+
var formatMoney = function formatMoney(num) {
|
|
1940
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
1941
|
+
_ref$precision = _ref.precision,
|
|
1942
|
+
precision = _ref$precision === void 0 ? 2 : _ref$precision,
|
|
1943
|
+
symbol = _ref.symbol,
|
|
1944
|
+
_ref$thousand = _ref.thousand,
|
|
1945
|
+
thousand = _ref$thousand === void 0 ? ',' : _ref$thousand,
|
|
1946
|
+
_ref$decimal = _ref.decimal,
|
|
1947
|
+
decimal = _ref$decimal === void 0 ? '.' : _ref$decimal;
|
|
1948
|
+
|
|
1617
1949
|
// 数字参数不正确,返回空字符串
|
|
1618
1950
|
// @ts-ignore
|
|
1619
1951
|
if (!checkNumber(num)) {
|
|
1620
1952
|
return '';
|
|
1621
|
-
}
|
|
1953
|
+
} // 参数规整化
|
|
1954
|
+
|
|
1622
1955
|
|
|
1623
|
-
// 参数规整化
|
|
1624
1956
|
if (typeof precision !== 'number' || _isNaN(precision) || precision < 0) {
|
|
1625
1957
|
precision = 2;
|
|
1626
1958
|
} else if (precision > 10) {
|
|
1627
1959
|
precision = 10;
|
|
1628
1960
|
}
|
|
1961
|
+
|
|
1629
1962
|
symbol = typeof symbol === 'string' ? symbol : '';
|
|
1630
1963
|
thousand = typeof thousand === 'string' ? thousand : ',';
|
|
1631
|
-
decimal = typeof decimal === 'string' ? decimal : '.';
|
|
1964
|
+
decimal = typeof decimal === 'string' ? decimal : '.'; // 转换数字字符串,支持科学记数法
|
|
1965
|
+
|
|
1966
|
+
var strNum = scientificToNumber(num) + ''; // 整数和小数部分
|
|
1632
1967
|
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1968
|
+
var _strNum$split = strNum.split('.'),
|
|
1969
|
+
_strNum$split2 = _slicedToArray(_strNum$split, 2),
|
|
1970
|
+
intStr = _strNum$split2[0],
|
|
1971
|
+
decStr = _strNum$split2[1];
|
|
1637
1972
|
|
|
1638
1973
|
return symbol + formatInt(intStr, thousand) + formatDec(decStr, precision, decimal);
|
|
1639
1974
|
};
|
|
@@ -1668,13 +2003,20 @@
|
|
|
1668
2003
|
* // => 6228-4804-0256-4890
|
|
1669
2004
|
*
|
|
1670
2005
|
*/
|
|
1671
|
-
function formatBankCard(bankCardNo = '', { char = ' ', length = 4 } = {}) {
|
|
1672
|
-
const reg = new RegExp(`(.{${length}})`, 'g');
|
|
1673
|
-
const regChar = new RegExp(`${char}`, 'g');
|
|
1674
2006
|
|
|
1675
|
-
|
|
1676
|
-
|
|
2007
|
+
function formatBankCard() {
|
|
2008
|
+
var bankCardNo = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
2009
|
+
|
|
2010
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
2011
|
+
_ref$char = _ref["char"],
|
|
2012
|
+
_char = _ref$char === void 0 ? ' ' : _ref$char,
|
|
2013
|
+
_ref$length = _ref.length,
|
|
2014
|
+
length = _ref$length === void 0 ? 4 : _ref$length;
|
|
1677
2015
|
|
|
2016
|
+
var reg = new RegExp("(.{".concat(length, "})"), 'g');
|
|
2017
|
+
var regChar = new RegExp("".concat(_char), 'g');
|
|
2018
|
+
var realValue = normalizeString(bankCardNo).replace(regChar, '');
|
|
2019
|
+
var str = realValue.replace(reg, "$1".concat(_char));
|
|
1678
2020
|
return realValue.length % length === 0 ? str.substring(0, str.length - 1) : str;
|
|
1679
2021
|
}
|
|
1680
2022
|
|
|
@@ -1724,64 +2066,69 @@
|
|
|
1724
2066
|
* // => 林**
|
|
1725
2067
|
*
|
|
1726
2068
|
*/
|
|
1727
|
-
function replaceChar(str, { start = 3, end = -4, char = '*', repeat, exclude } = {}) {
|
|
1728
|
-
const realStr = normalizeString(str);
|
|
1729
|
-
const strLen = realStr.length;
|
|
1730
2069
|
|
|
1731
|
-
|
|
2070
|
+
function replaceChar(str) {
|
|
2071
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
2072
|
+
_ref$start = _ref.start,
|
|
2073
|
+
start = _ref$start === void 0 ? 3 : _ref$start,
|
|
2074
|
+
_ref$end = _ref.end,
|
|
2075
|
+
end = _ref$end === void 0 ? -4 : _ref$end,
|
|
2076
|
+
_ref$char = _ref["char"],
|
|
2077
|
+
_char = _ref$char === void 0 ? '*' : _ref$char,
|
|
2078
|
+
repeat = _ref.repeat,
|
|
2079
|
+
exclude = _ref.exclude;
|
|
2080
|
+
|
|
2081
|
+
var realStr = normalizeString(str);
|
|
2082
|
+
var strLen = realStr.length; // 开始位置超过str长度
|
|
2083
|
+
|
|
1732
2084
|
if (Math.abs(start) >= strLen) {
|
|
1733
2085
|
return realStr;
|
|
1734
2086
|
}
|
|
1735
2087
|
|
|
1736
2088
|
start = start >= 0 ? start : strLen + start;
|
|
1737
|
-
end = end >= 0 ? end : strLen + end;
|
|
2089
|
+
end = end >= 0 ? end : strLen + end; // 开始位置大于结束位置
|
|
1738
2090
|
|
|
1739
|
-
// 开始位置大于结束位置
|
|
1740
2091
|
if (start >= end) {
|
|
1741
2092
|
return realStr;
|
|
1742
2093
|
}
|
|
1743
2094
|
|
|
1744
|
-
|
|
2095
|
+
var middleStr = realStr.substring(start, end);
|
|
1745
2096
|
|
|
1746
2097
|
if (exclude) {
|
|
1747
|
-
|
|
1748
|
-
middleStr = middleStr.replace(reg,
|
|
2098
|
+
var reg = new RegExp("[^".concat(exclude, "]"), 'g');
|
|
2099
|
+
middleStr = middleStr.replace(reg, _char);
|
|
1749
2100
|
} else {
|
|
1750
2101
|
repeat = typeof repeat === 'number' && repeat >= 0 ? repeat : middleStr.length;
|
|
1751
|
-
middleStr =
|
|
2102
|
+
middleStr = _char.repeat(repeat);
|
|
1752
2103
|
}
|
|
1753
2104
|
|
|
1754
2105
|
return realStr.substring(0, start) + middleStr + realStr.substring(end);
|
|
1755
2106
|
}
|
|
1756
2107
|
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
const chnUnitChar = ['', '十', '百', '千'];
|
|
2108
|
+
var chnNumberChar = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
|
|
2109
|
+
var chnUnitChar = ['', '十', '百', '千']; // 繁体
|
|
1760
2110
|
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
const big5UnitChar = ['', '拾', '佰', '仟'];
|
|
1764
|
-
|
|
1765
|
-
// 数字字符、计数单位
|
|
2111
|
+
var big5NumberChar = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
|
|
2112
|
+
var big5UnitChar = ['', '拾', '佰', '仟']; // 数字字符、计数单位
|
|
1766
2113
|
|
|
1767
2114
|
/**
|
|
1768
2115
|
* @type {string[]}
|
|
1769
2116
|
* @private
|
|
1770
2117
|
*/
|
|
1771
|
-
let numberChar;
|
|
1772
2118
|
|
|
2119
|
+
var numberChar;
|
|
1773
2120
|
/**
|
|
1774
2121
|
* @type {string[]}
|
|
1775
2122
|
* @private
|
|
1776
2123
|
*/
|
|
1777
|
-
let unitChar;
|
|
1778
2124
|
|
|
2125
|
+
var unitChar;
|
|
1779
2126
|
/**
|
|
1780
2127
|
* @type {string[]}
|
|
1781
2128
|
* @private
|
|
1782
2129
|
*/
|
|
1783
|
-
let unitSection;
|
|
1784
2130
|
|
|
2131
|
+
var unitSection;
|
|
1785
2132
|
/**
|
|
1786
2133
|
* 每个小节的内部进行转化
|
|
1787
2134
|
*
|
|
@@ -1789,17 +2136,18 @@
|
|
|
1789
2136
|
* @param {number} section 数字
|
|
1790
2137
|
* @returns {string} 转化的数字
|
|
1791
2138
|
*/
|
|
2139
|
+
|
|
1792
2140
|
function sectionToChinese(section) {
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
2141
|
+
var str = '';
|
|
2142
|
+
var chnstr = '';
|
|
2143
|
+
var zero = false; //zero为是否进行补零, 第一次进行取余由于为个位数,默认不补零
|
|
2144
|
+
|
|
2145
|
+
var unitPos = 0;
|
|
1797
2146
|
|
|
1798
2147
|
while (section > 0) {
|
|
1799
2148
|
// 对数字取余10,得到的数即为个位数
|
|
1800
|
-
|
|
2149
|
+
var v = section % 10; //如果数字为零,则对字符串进行补零
|
|
1801
2150
|
|
|
1802
|
-
//如果数字为零,则对字符串进行补零
|
|
1803
2151
|
if (v == 0) {
|
|
1804
2152
|
if (zero) {
|
|
1805
2153
|
//如果遇到连续多次取余都是0,那么只需补一个零即可
|
|
@@ -1813,12 +2161,13 @@
|
|
|
1813
2161
|
str += unitChar[unitPos];
|
|
1814
2162
|
chnstr = str + chnstr;
|
|
1815
2163
|
}
|
|
2164
|
+
|
|
1816
2165
|
unitPos++;
|
|
1817
2166
|
section = Math.floor(section / 10);
|
|
1818
2167
|
}
|
|
2168
|
+
|
|
1819
2169
|
return chnstr;
|
|
1820
2170
|
}
|
|
1821
|
-
|
|
1822
2171
|
/**
|
|
1823
2172
|
* 转换整数
|
|
1824
2173
|
*
|
|
@@ -1826,22 +2175,26 @@
|
|
|
1826
2175
|
* @param {number} num 要转换的数字
|
|
1827
2176
|
* @returns {string} 中文数字
|
|
1828
2177
|
*/
|
|
1829
|
-
function convertInteger(num) {
|
|
1830
|
-
let numInt = Math.floor(num);
|
|
1831
2178
|
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
2179
|
+
|
|
2180
|
+
function convertInteger(num) {
|
|
2181
|
+
var numInt = Math.floor(num);
|
|
2182
|
+
var unitPos = 0;
|
|
2183
|
+
var strIns = '';
|
|
2184
|
+
var chnStr = '';
|
|
2185
|
+
var needZero = false;
|
|
1836
2186
|
|
|
1837
2187
|
if (numInt === 0) {
|
|
1838
2188
|
return numberChar[0];
|
|
1839
2189
|
}
|
|
2190
|
+
|
|
1840
2191
|
while (numInt > 0) {
|
|
1841
2192
|
var section = numInt % 10000;
|
|
2193
|
+
|
|
1842
2194
|
if (needZero) {
|
|
1843
2195
|
chnStr = numberChar[0] + chnStr;
|
|
1844
2196
|
}
|
|
2197
|
+
|
|
1845
2198
|
strIns = sectionToChinese(section);
|
|
1846
2199
|
strIns += section !== 0 ? unitSection[unitPos] : unitSection[0];
|
|
1847
2200
|
chnStr = strIns + chnStr;
|
|
@@ -1849,29 +2202,29 @@
|
|
|
1849
2202
|
numInt = Math.floor(numInt / 10000);
|
|
1850
2203
|
unitPos++;
|
|
1851
2204
|
}
|
|
2205
|
+
|
|
1852
2206
|
return chnStr;
|
|
1853
2207
|
}
|
|
1854
|
-
|
|
1855
2208
|
/**
|
|
1856
2209
|
* 转换小数
|
|
1857
2210
|
*
|
|
1858
2211
|
* @private
|
|
1859
2212
|
* @param {number} num 要转换的数字
|
|
1860
2213
|
*/
|
|
1861
|
-
function convertDecimal(num) {
|
|
1862
|
-
const strNum = num + '';
|
|
1863
|
-
const index = strNum.indexOf('.');
|
|
1864
2214
|
|
|
1865
|
-
|
|
2215
|
+
|
|
2216
|
+
function convertDecimal(num) {
|
|
2217
|
+
var strNum = num + '';
|
|
2218
|
+
var index = strNum.indexOf('.');
|
|
2219
|
+
var ret = '';
|
|
1866
2220
|
|
|
1867
2221
|
if (index > -1) {
|
|
1868
|
-
|
|
2222
|
+
var decimalStr = strNum.slice(index + 1);
|
|
1869
2223
|
ret = mapNumberChar(parseInt(decimalStr));
|
|
1870
2224
|
}
|
|
1871
2225
|
|
|
1872
2226
|
return ret;
|
|
1873
2227
|
}
|
|
1874
|
-
|
|
1875
2228
|
/**
|
|
1876
2229
|
* 映射为中文数字
|
|
1877
2230
|
*
|
|
@@ -1879,17 +2232,18 @@
|
|
|
1879
2232
|
* @param {number} num 要处理的数字
|
|
1880
2233
|
* @returns {string} 返回中文数字的映射
|
|
1881
2234
|
*/
|
|
2235
|
+
|
|
2236
|
+
|
|
1882
2237
|
function mapNumberChar(num) {
|
|
1883
|
-
|
|
1884
|
-
|
|
2238
|
+
var strNum = num + '';
|
|
2239
|
+
var ret = '';
|
|
1885
2240
|
|
|
1886
|
-
for (
|
|
2241
|
+
for (var i = 0, len = strNum.length; i < len; i++) {
|
|
1887
2242
|
ret += numberChar[parseInt(strNum[i])];
|
|
1888
2243
|
}
|
|
1889
2244
|
|
|
1890
2245
|
return ret;
|
|
1891
2246
|
}
|
|
1892
|
-
|
|
1893
2247
|
/**
|
|
1894
2248
|
* 数字转中文数字
|
|
1895
2249
|
* 不在安全数字 -9007199254740991~9007199254740991 内,处理会有异常
|
|
@@ -1935,55 +2289,65 @@
|
|
|
1935
2289
|
* // => 一九九〇
|
|
1936
2290
|
*
|
|
1937
2291
|
*/
|
|
1938
|
-
|
|
2292
|
+
|
|
2293
|
+
|
|
2294
|
+
function numberToChinese(num) {
|
|
2295
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
2296
|
+
_ref$big = _ref.big5,
|
|
2297
|
+
big5 = _ref$big === void 0 ? false : _ref$big,
|
|
2298
|
+
_ref$unit = _ref.unit,
|
|
2299
|
+
unit = _ref$unit === void 0 ? true : _ref$unit,
|
|
2300
|
+
_ref$decimal = _ref.decimal,
|
|
2301
|
+
decimal = _ref$decimal === void 0 ? '点' : _ref$decimal,
|
|
2302
|
+
_ref$zero = _ref.zero,
|
|
2303
|
+
zero = _ref$zero === void 0 ? '' : _ref$zero,
|
|
2304
|
+
_ref$negative = _ref.negative,
|
|
2305
|
+
negative = _ref$negative === void 0 ? '负' : _ref$negative,
|
|
2306
|
+
_ref$unitConfig = _ref.unitConfig,
|
|
2307
|
+
unitConfig = _ref$unitConfig === void 0 ? {} : _ref$unitConfig;
|
|
2308
|
+
|
|
1939
2309
|
// 非数字 或 NaN 不处理
|
|
1940
2310
|
if (typeof num !== 'number' || isNaN(num)) {
|
|
1941
|
-
devWarn(
|
|
1942
|
-
|
|
2311
|
+
devWarn("\u53C2\u6570\u9519\u8BEF ".concat(num, "\uFF0C\u8BF7\u4F20\u5165\u6570\u5B57"));
|
|
1943
2312
|
return '';
|
|
1944
|
-
}
|
|
2313
|
+
} // 超过安全数字提示
|
|
2314
|
+
|
|
1945
2315
|
|
|
1946
|
-
//
|
|
1947
|
-
checkBoundary(num);
|
|
2316
|
+
checkBoundary(num); // 设置数字字符和计数单位
|
|
1948
2317
|
|
|
1949
|
-
// 设置数字字符和计数单位
|
|
1950
2318
|
if (big5) {
|
|
1951
2319
|
numberChar = big5NumberChar.slice();
|
|
1952
2320
|
unitChar = big5UnitChar.slice();
|
|
1953
2321
|
} else {
|
|
1954
2322
|
numberChar = chnNumberChar.slice();
|
|
1955
2323
|
unitChar = chnUnitChar.slice();
|
|
1956
|
-
}
|
|
2324
|
+
} // 设置节点计数单位,万、亿、万亿
|
|
2325
|
+
|
|
1957
2326
|
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
unitSection = ['', unitWan, unitYi, unitWanYi];
|
|
2327
|
+
var unitWan = (unitConfig === null || unitConfig === void 0 ? void 0 : unitConfig.w) || '万';
|
|
2328
|
+
var unitYi = (unitConfig === null || unitConfig === void 0 ? void 0 : unitConfig.y) || '亿';
|
|
2329
|
+
var unitWanYi = unitWan + unitYi;
|
|
2330
|
+
unitSection = ['', unitWan, unitYi, unitWanYi]; // 设置0
|
|
1963
2331
|
|
|
1964
|
-
// 设置0
|
|
1965
2332
|
if (zero) {
|
|
1966
2333
|
numberChar[0] = zero;
|
|
1967
|
-
}
|
|
2334
|
+
} // 前置字符,负数处理
|
|
2335
|
+
|
|
1968
2336
|
|
|
1969
|
-
//
|
|
1970
|
-
const preStr = num < 0 ? negative : '';
|
|
2337
|
+
var preStr = num < 0 ? negative : ''; // 整数和小数
|
|
1971
2338
|
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
const numAbs = Math.abs(num);
|
|
2339
|
+
var chnInteger, chnDecimal;
|
|
2340
|
+
var numAbs = Math.abs(num); // 处理整数
|
|
1975
2341
|
|
|
1976
|
-
// 处理整数
|
|
1977
2342
|
if (unit) {
|
|
1978
2343
|
chnInteger = convertInteger(numAbs);
|
|
1979
2344
|
} else {
|
|
1980
2345
|
chnInteger = mapNumberChar(Math.floor(numAbs));
|
|
1981
|
-
}
|
|
2346
|
+
} // 处理小数
|
|
1982
2347
|
|
|
1983
|
-
// 处理小数
|
|
1984
|
-
chnDecimal = convertDecimal(numAbs);
|
|
1985
2348
|
|
|
1986
|
-
|
|
2349
|
+
chnDecimal = convertDecimal(numAbs);
|
|
2350
|
+
return chnDecimal ? "".concat(preStr).concat(chnInteger).concat(decimal).concat(chnDecimal) : "".concat(preStr).concat(chnInteger);
|
|
1987
2351
|
}
|
|
1988
2352
|
|
|
1989
2353
|
/**
|
|
@@ -2009,76 +2373,36 @@
|
|
|
2009
2373
|
* // => 1 GB
|
|
2010
2374
|
*/
|
|
2011
2375
|
function bytesToSize(bytes) {
|
|
2012
|
-
|
|
2376
|
+
var numBytes = typeof bytes !== 'number' ? Number(bytes) : bytes;
|
|
2013
2377
|
if (numBytes === 0 || isNaN(numBytes)) return '0 B';
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
}
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
['34', '安徽省'],
|
|
2043
|
-
['35', '福建省'],
|
|
2044
|
-
['36', '江西省'],
|
|
2045
|
-
['37', '山东省'],
|
|
2046
|
-
|
|
2047
|
-
// 华中地区: 河南省|410000,湖北省|420000,湖南省|430000
|
|
2048
|
-
['41', '河南省'],
|
|
2049
|
-
['42', '湖北省'],
|
|
2050
|
-
['43', '湖南省'],
|
|
2051
|
-
|
|
2052
|
-
// 华南地区:广东省|440000,广西壮族自治区|450000,海南省|460000
|
|
2053
|
-
['44', '广东省'],
|
|
2054
|
-
['45', '广西壮族自治区'],
|
|
2055
|
-
['46', '海南省'],
|
|
2056
|
-
|
|
2057
|
-
// 西南地区:重庆市|500000,四川省|510000,贵州省|520000,云南省|530000,西藏自治区|540000
|
|
2058
|
-
['50', '重庆市'],
|
|
2059
|
-
['51', '四川省'],
|
|
2060
|
-
['52', '贵州省'],
|
|
2061
|
-
['53', '云南省'],
|
|
2062
|
-
['54', '西藏自治区'],
|
|
2063
|
-
|
|
2064
|
-
// 西北地区: 陕西省|610000,甘肃省|620000,青海省|630000,宁夏回族自治区|640000,新疆维吾尔自治区|650000
|
|
2065
|
-
['61', '陕西省'],
|
|
2066
|
-
['62', '甘肃省'],
|
|
2067
|
-
['63', '青海省'],
|
|
2068
|
-
['64', '宁夏回族自治区'],
|
|
2069
|
-
['65', '新疆维吾尔自治区'],
|
|
2070
|
-
|
|
2071
|
-
// 台湾地区:台湾省|710000
|
|
2072
|
-
// 台湾居民公民身份号码地址码为830000,参考 http://www.wanweibaike.com/wiki-中华人民共和国行政区划代码_(7区)、https://zh.wikipedia.org/wiki/港澳台居民居住证
|
|
2073
|
-
['71', '台湾省'],
|
|
2074
|
-
['83', '台湾省'],
|
|
2075
|
-
|
|
2076
|
-
// 港澳地区:香港特别行政区|810000,澳门特别行政区|820000
|
|
2077
|
-
['81', '香港特别行政区'],
|
|
2078
|
-
['82', '澳门特别行政区']
|
|
2079
|
-
];
|
|
2080
|
-
|
|
2081
|
-
// 第一位数字是以前的大区制代码。第二位是大区所在省市编码。全国共分为8个大区:华北(1)、东北(2)、华东(3)、中南(4)、西南(5)、西北(6)、台湾(7)和港澳(8)。
|
|
2378
|
+
var k = 1024; // 存储单位
|
|
2379
|
+
|
|
2380
|
+
var sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
|
|
2381
|
+
var i = Math.floor(Math.log(numBytes) / Math.log(k));
|
|
2382
|
+
return sizes[i] ? "".concat(Number((numBytes / Math.pow(k, i)).toFixed(2)), " ").concat(sizes[i]) : numBytes + '';
|
|
2383
|
+
}
|
|
2384
|
+
|
|
2385
|
+
var regIdCard = /*#__PURE__*/_wrapRegExp(/^([0-9]{2})([0-9]{2})([0-9]{2})((?:[0-9]{2})?[0-9]{2})([0-9]{2})([0-9]{2})[0-9]{2}([0-9])(?:[0-9]|X)?$/i, {
|
|
2386
|
+
province: 1,
|
|
2387
|
+
city: 2,
|
|
2388
|
+
area: 3,
|
|
2389
|
+
year: 4,
|
|
2390
|
+
month: 5,
|
|
2391
|
+
day: 6,
|
|
2392
|
+
gender: 7
|
|
2393
|
+
});
|
|
2394
|
+
|
|
2395
|
+
var Provinces = [// 华北地区:北京市|110000,天津市|120000,河北省|130000,山西省|140000,内蒙古自治区|150000
|
|
2396
|
+
['11', '北京市'], ['12', '天津市'], ['13', '河北省'], ['14', '山西省'], ['15', '内蒙古自治区'], // 东北地区: 辽宁省|210000,吉林省|220000,黑龙江省|230000
|
|
2397
|
+
['21', '辽宁省'], ['22', '吉林省'], ['23', '黑龙江省'], // 华东地区: 上海市|310000,江苏省|320000,浙江省|330000,安徽省|340000,福建省|350000,江西省|360000,山东省|370000
|
|
2398
|
+
['31', '上海市'], ['32', '江苏省'], ['33', '浙江省'], ['34', '安徽省'], ['35', '福建省'], ['36', '江西省'], ['37', '山东省'], // 华中地区: 河南省|410000,湖北省|420000,湖南省|430000
|
|
2399
|
+
['41', '河南省'], ['42', '湖北省'], ['43', '湖南省'], // 华南地区:广东省|440000,广西壮族自治区|450000,海南省|460000
|
|
2400
|
+
['44', '广东省'], ['45', '广西壮族自治区'], ['46', '海南省'], // 西南地区:重庆市|500000,四川省|510000,贵州省|520000,云南省|530000,西藏自治区|540000
|
|
2401
|
+
['50', '重庆市'], ['51', '四川省'], ['52', '贵州省'], ['53', '云南省'], ['54', '西藏自治区'], // 西北地区: 陕西省|610000,甘肃省|620000,青海省|630000,宁夏回族自治区|640000,新疆维吾尔自治区|650000
|
|
2402
|
+
['61', '陕西省'], ['62', '甘肃省'], ['63', '青海省'], ['64', '宁夏回族自治区'], ['65', '新疆维吾尔自治区'], // 台湾地区:台湾省|710000
|
|
2403
|
+
// 台湾居民公民身份号码地址码为830000,参考 http://www.wanweibaike.com/wiki-中华人民共和国行政区划代码_(7区)、https://zh.wikipedia.org/wiki/港澳台居民居住证
|
|
2404
|
+
['71', '台湾省'], ['83', '台湾省'], // 港澳地区:香港特别行政区|810000,澳门特别行政区|820000
|
|
2405
|
+
['81', '香港特别行政区'], ['82', '澳门特别行政区']]; // 第一位数字是以前的大区制代码。第二位是大区所在省市编码。全国共分为8个大区:华北(1)、东北(2)、华东(3)、中南(4)、西南(5)、西北(6)、台湾(7)和港澳(8)。
|
|
2082
2406
|
// const Regions = [
|
|
2083
2407
|
// ['1', '华北地区'],
|
|
2084
2408
|
// ['2', '东北地区'],
|
|
@@ -2143,23 +2467,27 @@
|
|
|
2143
2467
|
* }
|
|
2144
2468
|
*
|
|
2145
2469
|
*/
|
|
2470
|
+
|
|
2146
2471
|
function parseIdCard(id) {
|
|
2147
|
-
if (!isIdCard(id, {
|
|
2472
|
+
if (!isIdCard(id, {
|
|
2473
|
+
loose: true
|
|
2474
|
+
})) {
|
|
2148
2475
|
return null;
|
|
2149
2476
|
}
|
|
2150
2477
|
|
|
2151
|
-
|
|
2478
|
+
var info = regIdCard.exec(id);
|
|
2152
2479
|
|
|
2153
2480
|
if (!info) {
|
|
2154
2481
|
return null;
|
|
2155
2482
|
}
|
|
2156
|
-
|
|
2157
2483
|
/**
|
|
2158
2484
|
* @type {{ province: string, city: string, area: string, year: string, month: string, day: string, gender: string }}
|
|
2159
2485
|
*
|
|
2160
2486
|
*/
|
|
2161
2487
|
// @ts-ignore
|
|
2162
|
-
|
|
2488
|
+
|
|
2489
|
+
|
|
2490
|
+
var origin = (info === null || info === void 0 ? void 0 : info.groups) || {
|
|
2163
2491
|
province: info[1],
|
|
2164
2492
|
city: info[2],
|
|
2165
2493
|
area: info[3],
|
|
@@ -2168,23 +2496,23 @@
|
|
|
2168
2496
|
day: info[6],
|
|
2169
2497
|
gender: info[7]
|
|
2170
2498
|
};
|
|
2171
|
-
|
|
2172
|
-
|
|
2499
|
+
var province = Provinces.find(function (item) {
|
|
2500
|
+
return item[0] === origin.province;
|
|
2501
|
+
});
|
|
2173
2502
|
|
|
2174
2503
|
if (!province) {
|
|
2175
2504
|
return null;
|
|
2176
2505
|
}
|
|
2177
2506
|
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
// const region = Regions.find(item => item[0] === origin.province?.substring(0, 1));
|
|
2507
|
+
var birthday = "".concat(origin.year, "-").concat(origin.month, "-").concat(origin.day);
|
|
2508
|
+
var gender = Number(origin.gender) % 2 === 0 ? '女' : '男'; // const region = Regions.find(item => item[0] === origin.province?.substring(0, 1));
|
|
2181
2509
|
|
|
2182
2510
|
return {
|
|
2183
2511
|
// region,
|
|
2184
2512
|
province: province[1],
|
|
2185
|
-
birthday,
|
|
2186
|
-
gender,
|
|
2187
|
-
origin
|
|
2513
|
+
birthday: birthday,
|
|
2514
|
+
gender: gender,
|
|
2515
|
+
origin: origin
|
|
2188
2516
|
};
|
|
2189
2517
|
}
|
|
2190
2518
|
|
|
@@ -2216,12 +2544,17 @@
|
|
|
2216
2544
|
* });
|
|
2217
2545
|
*/
|
|
2218
2546
|
function blobToDataURL(blob) {
|
|
2219
|
-
return new Promise((resolve, reject)
|
|
2220
|
-
|
|
2221
|
-
reader.readAsDataURL(blob);
|
|
2222
|
-
|
|
2223
|
-
reader.onload = ()
|
|
2224
|
-
|
|
2547
|
+
return new Promise(function (resolve, reject) {
|
|
2548
|
+
var reader = new FileReader();
|
|
2549
|
+
reader.readAsDataURL(blob); // @ts-ignore
|
|
2550
|
+
|
|
2551
|
+
reader.onload = function () {
|
|
2552
|
+
return resolve(reader.result);
|
|
2553
|
+
};
|
|
2554
|
+
|
|
2555
|
+
reader.onerror = function (error) {
|
|
2556
|
+
return reject(error);
|
|
2557
|
+
};
|
|
2225
2558
|
});
|
|
2226
2559
|
}
|
|
2227
2560
|
|
|
@@ -2239,17 +2572,20 @@
|
|
|
2239
2572
|
* dataURLToBlob(dataurl);
|
|
2240
2573
|
*/
|
|
2241
2574
|
function dataURLToBlob(dataurl) {
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2575
|
+
var arr = dataurl.split(','); // @ts-ignore
|
|
2576
|
+
|
|
2577
|
+
var mime = arr[0].match(/:(.*?);/)[1];
|
|
2578
|
+
var bstr = atob(arr[1]);
|
|
2579
|
+
var n = bstr.length;
|
|
2580
|
+
var u8arr = new Uint8Array(n);
|
|
2248
2581
|
|
|
2249
2582
|
while (n--) {
|
|
2250
2583
|
u8arr[n] = bstr.charCodeAt(n);
|
|
2251
2584
|
}
|
|
2252
|
-
|
|
2585
|
+
|
|
2586
|
+
return new Blob([u8arr], {
|
|
2587
|
+
type: mime
|
|
2588
|
+
});
|
|
2253
2589
|
}
|
|
2254
2590
|
|
|
2255
2591
|
/**
|
|
@@ -2274,12 +2610,12 @@
|
|
|
2274
2610
|
* setDataURLPrefix(data, ''); // data:;base64,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=
|
|
2275
2611
|
* setDataURLPrefix(data, '', false); // data:,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=
|
|
2276
2612
|
*/
|
|
2277
|
-
function setDataURLPrefix(data
|
|
2278
|
-
|
|
2613
|
+
function setDataURLPrefix(data) {
|
|
2614
|
+
var mimetype = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'image/png';
|
|
2615
|
+
var base64 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
|
2616
|
+
return "data:".concat(mimetype).concat(base64 ? ';base64' : '', ",").concat(data);
|
|
2279
2617
|
}
|
|
2280
2618
|
|
|
2281
|
-
// TODO: 函数重载,类型参照 Date
|
|
2282
|
-
|
|
2283
2619
|
/**
|
|
2284
2620
|
* 创建一个 Date 实例日期对象,同 new Date() 。<br/>
|
|
2285
2621
|
* 规避了苹果设备浏览器不支持部分格式(YYYY-MM-DD HH-mm 或 YYYY.MM.DD)。
|
|
@@ -2300,15 +2636,20 @@
|
|
|
2300
2636
|
* safeDate(1646711233171); // Tue Mar 08 2022 11:47:13 GMT+0800 (中国标准时间)
|
|
2301
2637
|
*
|
|
2302
2638
|
*/
|
|
2303
|
-
|
|
2304
|
-
|
|
2639
|
+
|
|
2640
|
+
function safeDate(value) {
|
|
2641
|
+
var safeValue = typeof value === 'string' ? value.replace(/[\\.-]/g, '/') : value;
|
|
2642
|
+
|
|
2643
|
+
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
2644
|
+
args[_key - 1] = arguments[_key];
|
|
2645
|
+
}
|
|
2305
2646
|
|
|
2306
2647
|
if (args && args.length > 0) {
|
|
2307
2648
|
// @ts-ignore
|
|
2308
|
-
return
|
|
2309
|
-
}
|
|
2649
|
+
return _construct(Date, [safeValue].concat(args));
|
|
2650
|
+
} // @ts-ignore
|
|
2651
|
+
|
|
2310
2652
|
|
|
2311
|
-
// @ts-ignore
|
|
2312
2653
|
return isNil(safeValue) ? new Date() : new Date(safeValue);
|
|
2313
2654
|
}
|
|
2314
2655
|
|
|
@@ -2335,16 +2676,23 @@
|
|
|
2335
2676
|
* formatMobile('133456') // '133 456'
|
|
2336
2677
|
* formatMobile('13345678') // '133 4567 8'
|
|
2337
2678
|
*/
|
|
2338
|
-
|
|
2339
|
-
|
|
2340
|
-
|
|
2679
|
+
|
|
2680
|
+
function formatMobile(mobileNo) {
|
|
2681
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
2682
|
+
_ref$char = _ref["char"],
|
|
2683
|
+
_char = _ref$char === void 0 ? ' ' : _ref$char;
|
|
2684
|
+
|
|
2685
|
+
var regChar = new RegExp(_char, 'g');
|
|
2686
|
+
var realValue = normalizeString(mobileNo).replace(regChar, '').substring(0, 11);
|
|
2341
2687
|
|
|
2342
2688
|
if (realValue.length > 7) {
|
|
2343
|
-
return realValue.replace(/^(...)(....)/g,
|
|
2689
|
+
return realValue.replace(/^(...)(....)/g, "$1".concat(_char, "$2").concat(_char));
|
|
2344
2690
|
}
|
|
2691
|
+
|
|
2345
2692
|
if (realValue.length > 3) {
|
|
2346
|
-
return realValue.replace(/^(...)/g,
|
|
2693
|
+
return realValue.replace(/^(...)/g, "$1".concat(_char));
|
|
2347
2694
|
}
|
|
2695
|
+
|
|
2348
2696
|
return realValue;
|
|
2349
2697
|
}
|
|
2350
2698
|
|
|
@@ -2370,9 +2718,11 @@
|
|
|
2370
2718
|
* padZero(688, 5); // '00688'
|
|
2371
2719
|
* padZero('688', 5); // '00688'
|
|
2372
2720
|
*/
|
|
2373
|
-
|
|
2374
|
-
|
|
2375
|
-
|
|
2721
|
+
|
|
2722
|
+
function padZero(value) {
|
|
2723
|
+
var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
|
|
2724
|
+
var str = normalizeString(value);
|
|
2725
|
+
var len = str.length;
|
|
2376
2726
|
|
|
2377
2727
|
if (typeof size !== 'number' || size < 0) {
|
|
2378
2728
|
size = 0;
|
|
@@ -2381,36 +2731,8 @@
|
|
|
2381
2731
|
if (len < size) {
|
|
2382
2732
|
return '0'.repeat(size - len) + str;
|
|
2383
2733
|
}
|
|
2384
|
-
return str;
|
|
2385
|
-
}
|
|
2386
2734
|
|
|
2387
|
-
|
|
2388
|
-
* 检查值是否为Number
|
|
2389
|
-
*
|
|
2390
|
-
* @static
|
|
2391
|
-
* @alias module:Type.isNumber
|
|
2392
|
-
* @since 1.1.0
|
|
2393
|
-
* @param {*} value 检查值
|
|
2394
|
-
* @returns {boolean} 是否为Number
|
|
2395
|
-
* @example
|
|
2396
|
-
*
|
|
2397
|
-
* isNumber(1)
|
|
2398
|
-
* // => true
|
|
2399
|
-
*
|
|
2400
|
-
* isNumber(Number.MIN_VALUE)
|
|
2401
|
-
* // => true
|
|
2402
|
-
*
|
|
2403
|
-
* isNumber(Infinity)
|
|
2404
|
-
* // => true
|
|
2405
|
-
*
|
|
2406
|
-
* isNumber(NaN)
|
|
2407
|
-
* // => true
|
|
2408
|
-
*
|
|
2409
|
-
* isNumber('1')
|
|
2410
|
-
* // => false
|
|
2411
|
-
*/
|
|
2412
|
-
function isNumber(value) {
|
|
2413
|
-
return isType(value, 'Number');
|
|
2735
|
+
return str;
|
|
2414
2736
|
}
|
|
2415
2737
|
|
|
2416
2738
|
/**
|
|
@@ -2432,25 +2754,32 @@
|
|
|
2432
2754
|
* times(3, 0.6, 2, 10);
|
|
2433
2755
|
* // => 36
|
|
2434
2756
|
*/
|
|
2435
|
-
function times(...nums) {
|
|
2436
|
-
const [num1, num2, ...rest] = nums;
|
|
2437
|
-
if (rest.length > 0) {
|
|
2438
|
-
return times(times(num1, num2), ...rest);
|
|
2439
|
-
}
|
|
2440
2757
|
|
|
2441
|
-
|
|
2442
|
-
|
|
2443
|
-
|
|
2444
|
-
return num1;
|
|
2758
|
+
function times() {
|
|
2759
|
+
for (var _len = arguments.length, nums = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
2760
|
+
nums[_key] = arguments[_key];
|
|
2445
2761
|
}
|
|
2446
2762
|
|
|
2447
|
-
|
|
2448
|
-
|
|
2449
|
-
|
|
2450
|
-
const leftValue = num1Changed * num2Changed;
|
|
2763
|
+
var num1 = nums[0],
|
|
2764
|
+
num2 = nums[1],
|
|
2765
|
+
rest = nums.slice(2);
|
|
2451
2766
|
|
|
2452
|
-
|
|
2767
|
+
if (rest.length > 0) {
|
|
2768
|
+
return times.apply(void 0, [times(num1, num2)].concat(_toConsumableArray(rest)));
|
|
2769
|
+
} // 兼容处理,如果参数包含无效数值时,尝试取出有效数值参数
|
|
2453
2770
|
|
|
2771
|
+
|
|
2772
|
+
if (!isEffectiveNumeric(num1)) {
|
|
2773
|
+
return isEffectiveNumeric(num2) ? Number(num2) : NaN;
|
|
2774
|
+
} else if (!isEffectiveNumeric(num2)) {
|
|
2775
|
+
return Number(num1);
|
|
2776
|
+
}
|
|
2777
|
+
|
|
2778
|
+
var num1Changed = float2Fixed(num1);
|
|
2779
|
+
var num2Changed = float2Fixed(num2);
|
|
2780
|
+
var baseNum = digitLength(num1) + digitLength(num2);
|
|
2781
|
+
var leftValue = num1Changed * num2Changed;
|
|
2782
|
+
checkBoundary(leftValue);
|
|
2454
2783
|
return leftValue / Math.pow(10, baseNum);
|
|
2455
2784
|
}
|
|
2456
2785
|
|
|
@@ -2473,20 +2802,28 @@
|
|
|
2473
2802
|
* plus(0.1, 0.2, 0.3, 0.4);
|
|
2474
2803
|
* // => 1
|
|
2475
2804
|
*/
|
|
2476
|
-
function plus(...nums) {
|
|
2477
|
-
const [num1, num2, ...rest] = nums;
|
|
2478
2805
|
|
|
2479
|
-
|
|
2480
|
-
|
|
2806
|
+
function plus() {
|
|
2807
|
+
for (var _len = arguments.length, nums = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
2808
|
+
nums[_key] = arguments[_key];
|
|
2481
2809
|
}
|
|
2482
2810
|
|
|
2483
|
-
|
|
2484
|
-
|
|
2485
|
-
|
|
2486
|
-
|
|
2811
|
+
var num1 = nums[0],
|
|
2812
|
+
num2 = nums[1],
|
|
2813
|
+
rest = nums.slice(2);
|
|
2814
|
+
|
|
2815
|
+
if (rest.length > 0) {
|
|
2816
|
+
return plus.apply(void 0, [plus(num1, num2)].concat(_toConsumableArray(rest)));
|
|
2817
|
+
} // 兼容处理,如果参数包含无效数值时,尝试取出有效数值参数
|
|
2818
|
+
|
|
2819
|
+
|
|
2820
|
+
if (!isEffectiveNumeric(num1)) {
|
|
2821
|
+
return isEffectiveNumeric(num2) ? Number(num2) : NaN;
|
|
2822
|
+
} else if (!isEffectiveNumeric(num2)) {
|
|
2823
|
+
return Number(num1);
|
|
2487
2824
|
}
|
|
2488
2825
|
|
|
2489
|
-
|
|
2826
|
+
var baseNum = Math.pow(10, Math.max(digitLength(num1), digitLength(num2)));
|
|
2490
2827
|
return (times(num1, baseNum) + times(num2, baseNum)) / baseNum;
|
|
2491
2828
|
}
|
|
2492
2829
|
|
|
@@ -2509,20 +2846,28 @@
|
|
|
2509
2846
|
* minus(1, 0.9, 0.02, 0.08);
|
|
2510
2847
|
* // => 0
|
|
2511
2848
|
*/
|
|
2512
|
-
function minus(...nums) {
|
|
2513
|
-
const [num1, num2, ...rest] = nums;
|
|
2514
2849
|
|
|
2515
|
-
|
|
2516
|
-
|
|
2850
|
+
function minus() {
|
|
2851
|
+
for (var _len = arguments.length, nums = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
2852
|
+
nums[_key] = arguments[_key];
|
|
2517
2853
|
}
|
|
2518
2854
|
|
|
2519
|
-
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2855
|
+
var num1 = nums[0],
|
|
2856
|
+
num2 = nums[1],
|
|
2857
|
+
rest = nums.slice(2);
|
|
2858
|
+
|
|
2859
|
+
if (rest.length > 0) {
|
|
2860
|
+
return minus.apply(void 0, [minus(num1, num2)].concat(_toConsumableArray(rest)));
|
|
2861
|
+
} // 兼容处理,如果参数包含无效数值时,尝试取出有效数值参数
|
|
2862
|
+
|
|
2863
|
+
|
|
2864
|
+
if (!isEffectiveNumeric(num1)) {
|
|
2865
|
+
return isEffectiveNumeric(num2) ? Number(num2) : NaN;
|
|
2866
|
+
} else if (!isEffectiveNumeric(num2)) {
|
|
2867
|
+
return Number(num1);
|
|
2523
2868
|
}
|
|
2524
2869
|
|
|
2525
|
-
|
|
2870
|
+
var baseNum = Math.pow(10, Math.max(digitLength(num1), digitLength(num2)));
|
|
2526
2871
|
return (times(num1, baseNum) - times(num2, baseNum)) / baseNum;
|
|
2527
2872
|
}
|
|
2528
2873
|
|
|
@@ -2545,24 +2890,32 @@
|
|
|
2545
2890
|
* divide(1000, 10, 10, 10);
|
|
2546
2891
|
* // => 1
|
|
2547
2892
|
*/
|
|
2548
|
-
function divide(...nums) {
|
|
2549
|
-
const [num1, num2, ...rest] = nums;
|
|
2550
2893
|
|
|
2551
|
-
|
|
2552
|
-
|
|
2894
|
+
function divide() {
|
|
2895
|
+
for (var _len = arguments.length, nums = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
2896
|
+
nums[_key] = arguments[_key];
|
|
2553
2897
|
}
|
|
2554
2898
|
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2899
|
+
var num1 = nums[0],
|
|
2900
|
+
num2 = nums[1],
|
|
2901
|
+
rest = nums.slice(2);
|
|
2902
|
+
|
|
2903
|
+
if (rest.length > 0) {
|
|
2904
|
+
return divide.apply(void 0, [divide(num1, num2)].concat(_toConsumableArray(rest)));
|
|
2905
|
+
} // 兼容处理,如果参数包含无效数值时,尝试取出有效数值参数
|
|
2906
|
+
|
|
2907
|
+
|
|
2908
|
+
if (!isEffectiveNumeric(num1)) {
|
|
2909
|
+
return isEffectiveNumeric(num2) ? Number(num2) : NaN;
|
|
2910
|
+
} else if (!isEffectiveNumeric(num2)) {
|
|
2911
|
+
return Number(num1);
|
|
2559
2912
|
}
|
|
2560
2913
|
|
|
2561
|
-
|
|
2562
|
-
|
|
2914
|
+
var num1Changed = float2Fixed(num1);
|
|
2915
|
+
var num2Changed = float2Fixed(num2);
|
|
2563
2916
|
checkBoundary(num1Changed);
|
|
2564
|
-
checkBoundary(num2Changed);
|
|
2565
|
-
|
|
2917
|
+
checkBoundary(num2Changed); // fix: 类似 10 ** -4 为 0.00009999999999999999,strip 修正
|
|
2918
|
+
|
|
2566
2919
|
return times(num1Changed / num2Changed, strip(Math.pow(10, digitLength(num2) - digitLength(num1))));
|
|
2567
2920
|
}
|
|
2568
2921
|
|
|
@@ -2586,14 +2939,16 @@
|
|
|
2586
2939
|
* round(4060, -2);
|
|
2587
2940
|
* // => 4100
|
|
2588
2941
|
*/
|
|
2589
|
-
|
|
2590
|
-
|
|
2591
|
-
|
|
2592
|
-
|
|
2593
|
-
|
|
2942
|
+
|
|
2943
|
+
function round(num) {
|
|
2944
|
+
var precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
2945
|
+
|
|
2946
|
+
// 兼容处理,如果参数包含无效数值时,返回第一个参数
|
|
2947
|
+
if (!isEffectiveNumeric(num)) {
|
|
2948
|
+
return NaN;
|
|
2594
2949
|
}
|
|
2595
2950
|
|
|
2596
|
-
|
|
2951
|
+
var base = Math.pow(10, precision);
|
|
2597
2952
|
return divide(Math.round(times(num, base)), base);
|
|
2598
2953
|
}
|
|
2599
2954
|
|
|
@@ -2615,14 +2970,13 @@
|
|
|
2615
2970
|
* // do something
|
|
2616
2971
|
* })
|
|
2617
2972
|
*/
|
|
2618
|
-
function waitTime(
|
|
2619
|
-
|
|
2973
|
+
function waitTime() {
|
|
2974
|
+
var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1000;
|
|
2975
|
+
return new Promise(function (resolve) {
|
|
2620
2976
|
setTimeout(resolve, time);
|
|
2621
2977
|
});
|
|
2622
2978
|
}
|
|
2623
2979
|
|
|
2624
|
-
// ref: https://github.com/ant-design/ant-design-mobile/blob/v2/components/input-item/index.tsx#L240
|
|
2625
|
-
|
|
2626
2980
|
/**
|
|
2627
2981
|
* 计算输入框的值格式化后光标位置
|
|
2628
2982
|
*
|
|
@@ -2643,22 +2997,28 @@
|
|
|
2643
2997
|
* @param {'mobile'|'bankCard'} [options.type] 格式化类型,内置手机号码和银行卡号特殊处理
|
|
2644
2998
|
* @returns {number} 格式化后的光标位置
|
|
2645
2999
|
*/
|
|
2646
|
-
function calculateCursorPosition(prevPos, prevCtrlValue, rawValue, ctrlValue, { placeholderChar = ' ', maskReg = /\D/g, type } = {}) {
|
|
2647
|
-
const realCtrlValue = normalizeString(prevCtrlValue);
|
|
2648
|
-
const realRawValue = normalizeString(rawValue);
|
|
2649
|
-
const placeholderChars = Array.isArray(placeholderChar) ? placeholderChar : [placeholderChar];
|
|
2650
3000
|
|
|
2651
|
-
|
|
2652
|
-
|
|
3001
|
+
function calculateCursorPosition(prevPos, prevCtrlValue, rawValue, ctrlValue) {
|
|
3002
|
+
var _ref = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {},
|
|
3003
|
+
_ref$placeholderChar = _ref.placeholderChar,
|
|
3004
|
+
placeholderChar = _ref$placeholderChar === void 0 ? ' ' : _ref$placeholderChar,
|
|
3005
|
+
_ref$maskReg = _ref.maskReg,
|
|
3006
|
+
maskReg = _ref$maskReg === void 0 ? /\D/g : _ref$maskReg,
|
|
3007
|
+
type = _ref.type;
|
|
2653
3008
|
|
|
2654
|
-
|
|
3009
|
+
var realCtrlValue = normalizeString(prevCtrlValue);
|
|
3010
|
+
var realRawValue = normalizeString(rawValue);
|
|
3011
|
+
var placeholderChars = Array.isArray(placeholderChar) ? placeholderChar : [placeholderChar];
|
|
3012
|
+
var editLength = realRawValue.length - realCtrlValue.length;
|
|
3013
|
+
var isAddition = editLength > 0;
|
|
3014
|
+
var pos = prevPos;
|
|
2655
3015
|
|
|
2656
3016
|
if (isAddition) {
|
|
2657
|
-
|
|
2658
|
-
|
|
3017
|
+
var additionStr = realRawValue.substring(pos - editLength, pos);
|
|
3018
|
+
var ctrlCharCount = additionStr.replace(maskReg, '').length;
|
|
2659
3019
|
pos -= editLength - ctrlCharCount;
|
|
3020
|
+
var placeholderCharCount = 0;
|
|
2660
3021
|
|
|
2661
|
-
let placeholderCharCount = 0;
|
|
2662
3022
|
while (ctrlCharCount > 0) {
|
|
2663
3023
|
if (placeholderChars.indexOf(ctrlValue.charAt(pos - ctrlCharCount + placeholderCharCount)) !== -1) {
|
|
2664
3024
|
placeholderCharCount++;
|
|
@@ -2666,20 +3026,20 @@
|
|
|
2666
3026
|
ctrlCharCount--;
|
|
2667
3027
|
}
|
|
2668
3028
|
}
|
|
3029
|
+
|
|
2669
3030
|
pos += placeholderCharCount;
|
|
2670
3031
|
}
|
|
2671
3032
|
|
|
2672
|
-
if (
|
|
3033
|
+
if (type === 'mobile' && (pos === 4 || pos === 9) || type === 'bankCard' && pos > 0 && pos % 5 === 0) {
|
|
2673
3034
|
pos -= 1;
|
|
2674
3035
|
}
|
|
2675
3036
|
|
|
2676
3037
|
return pos;
|
|
2677
3038
|
}
|
|
2678
3039
|
|
|
2679
|
-
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
|
|
3040
|
+
var numberChars = '0123456789';
|
|
3041
|
+
var letterChars = 'abcdefghijklmnopqrstuvwxyz';
|
|
3042
|
+
var defaultChars = numberChars + letterChars + letterChars.toUpperCase();
|
|
2683
3043
|
/**
|
|
2684
3044
|
* @private
|
|
2685
3045
|
* @param {number} [len=0] 长度
|
|
@@ -2687,14 +3047,19 @@
|
|
|
2687
3047
|
* @param {string} [prefix=''] 前缀部分,不计入长度
|
|
2688
3048
|
* @returns {string}
|
|
2689
3049
|
*/
|
|
2690
|
-
|
|
3050
|
+
|
|
3051
|
+
function internalRandomString() {
|
|
3052
|
+
var len = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
3053
|
+
var optionalChars = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultChars;
|
|
3054
|
+
var prefix = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
|
|
3055
|
+
|
|
2691
3056
|
while (len-- > 0) {
|
|
2692
|
-
|
|
3057
|
+
var r = optionalChars[Math.floor(Math.random() * optionalChars.length)];
|
|
2693
3058
|
return internalRandomString(len, optionalChars, prefix + r);
|
|
2694
3059
|
}
|
|
3060
|
+
|
|
2695
3061
|
return prefix;
|
|
2696
3062
|
}
|
|
2697
|
-
|
|
2698
3063
|
/**
|
|
2699
3064
|
* 生成随机字符串
|
|
2700
3065
|
*
|
|
@@ -2712,10 +3077,13 @@
|
|
|
2712
3077
|
* randomString(5, 'abc'); // ccbcb
|
|
2713
3078
|
* randomString(8, 'abcefg'); // bcgcfabg
|
|
2714
3079
|
*/
|
|
2715
|
-
function randomString(len = 0, optionalChars) {
|
|
2716
3080
|
|
|
2717
|
-
const realChars = typeof optionalChars === 'string' && optionalChars ? optionalChars : defaultChars;
|
|
2718
3081
|
|
|
3082
|
+
function randomString() {
|
|
3083
|
+
var len = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
3084
|
+
var optionalChars = arguments.length > 1 ? arguments[1] : undefined;
|
|
3085
|
+
|
|
3086
|
+
var realChars = typeof optionalChars === 'string' && optionalChars ? optionalChars : defaultChars;
|
|
2719
3087
|
return internalRandomString(len, realChars);
|
|
2720
3088
|
}
|
|
2721
3089
|
|
|
@@ -2737,17 +3105,21 @@
|
|
|
2737
3105
|
* strlen('🍎'); // 4
|
|
2738
3106
|
*
|
|
2739
3107
|
*/
|
|
3108
|
+
|
|
2740
3109
|
function strlen(str) {
|
|
2741
|
-
|
|
2742
|
-
|
|
2743
|
-
|
|
2744
|
-
|
|
2745
|
-
|
|
3110
|
+
var realStr = normalizeString(str);
|
|
3111
|
+
var len = 0;
|
|
3112
|
+
|
|
3113
|
+
for (var i = 0; i < realStr.length; i++) {
|
|
3114
|
+
var c = realStr.charCodeAt(i);
|
|
3115
|
+
|
|
3116
|
+
if (c >= 0x0001 && c <= 0x007e || 0xff60 <= c && c <= 0xff9f) {
|
|
2746
3117
|
len++;
|
|
2747
3118
|
} else {
|
|
2748
3119
|
len += 2;
|
|
2749
3120
|
}
|
|
2750
3121
|
}
|
|
3122
|
+
|
|
2751
3123
|
return len;
|
|
2752
3124
|
}
|
|
2753
3125
|
|
|
@@ -2795,6 +3167,7 @@
|
|
|
2795
3167
|
exports.strlen = strlen;
|
|
2796
3168
|
exports.times = times;
|
|
2797
3169
|
exports.validatePassword = validatePassword;
|
|
3170
|
+
exports.version = version;
|
|
2798
3171
|
exports.waitTime = waitTime;
|
|
2799
3172
|
|
|
2800
3173
|
Object.defineProperty(exports, '__esModule', { value: true });
|