@ivujs/i-utils 1.1.18 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +122 -58
- package/dist/cjs/ID-card/index.cjs +95 -0
- package/dist/cjs/array/index.cjs +476 -0
- package/dist/cjs/clipboard/index.cjs +132 -0
- package/dist/cjs/color/index.cjs +207 -0
- package/dist/cjs/constants/date.cjs +178 -0
- package/dist/cjs/constants/id-card.cjs +52 -0
- package/dist/cjs/constants/keycode.cjs +117 -0
- package/dist/cjs/constants/lang.cjs +13 -0
- package/dist/cjs/constants/math.cjs +13 -0
- package/dist/cjs/constants/regexp.cjs +53 -0
- package/dist/cjs/constants/sort.cjs +15 -0
- package/dist/cjs/cookie/index.cjs +73 -0
- package/dist/cjs/crypto/base64/base64.cjs +540 -0
- package/dist/cjs/crypto/base64/index.cjs +82 -0
- package/dist/cjs/crypto/md5/index.cjs +49 -0
- package/dist/cjs/crypto/md5/md5.cjs +351 -0
- package/dist/cjs/crypto/sha256/index.cjs +95 -0
- package/dist/cjs/crypto/sha256/sha256.cjs +557 -0
- package/dist/cjs/crypto/sm3/index.cjs +27 -0
- package/dist/cjs/crypto/sm3/sm3.cjs +200 -0
- package/dist/cjs/crypto/sm4/index.cjs +101 -0
- package/dist/cjs/crypto/sm4/sm4.cjs +498 -0
- package/dist/cjs/date/index.cjs +1310 -0
- package/dist/cjs/desensitized/index.cjs +78 -0
- package/dist/cjs/device/index.cjs +154 -0
- package/dist/cjs/dom/index.cjs +132 -0
- package/dist/cjs/file/index.cjs +343 -0
- package/dist/cjs/function/index.cjs +72 -0
- package/dist/cjs/id/index.cjs +6 -2
- package/dist/cjs/index.cjs +383 -7
- package/dist/cjs/keycode/index.cjs +30 -0
- package/dist/cjs/math/index.cjs +310 -0
- package/dist/cjs/number/index.cjs +34 -0
- package/dist/cjs/object/index.cjs +319 -0
- package/dist/cjs/pagination/index.cjs +146 -0
- package/dist/cjs/random/index.cjs +27 -0
- package/dist/cjs/regexp/index.cjs +103 -0
- package/dist/cjs/storage/index.cjs +14 -0
- package/dist/cjs/storage/localStorage.cjs +37 -0
- package/dist/cjs/storage/sessionStorage.cjs +37 -0
- package/dist/cjs/string/index.cjs +361 -0
- package/dist/cjs/url/index.cjs +261 -0
- package/dist/cjs/validate/index.cjs +484 -0
- package/dist/es/ID-card/index.d.ts +36 -0
- package/dist/es/ID-card/index.mjs +89 -0
- package/dist/es/array/index.d.ts +209 -0
- package/dist/es/array/index.mjs +447 -0
- package/dist/es/clipboard/index.d.ts +32 -0
- package/dist/es/clipboard/index.mjs +126 -0
- package/dist/es/color/index.d.ts +55 -0
- package/dist/es/color/index.mjs +197 -0
- package/dist/es/constants/date.d.ts +4 -0
- package/dist/es/constants/date.mjs +176 -0
- package/dist/es/constants/id-card.d.ts +4 -0
- package/dist/es/constants/id-card.mjs +50 -0
- package/dist/es/constants/index.d.ts +11 -0
- package/dist/es/constants/keycode.d.ts +1 -0
- package/dist/es/constants/keycode.mjs +115 -0
- package/dist/es/constants/lang.d.ts +4 -0
- package/dist/es/constants/lang.mjs +11 -0
- package/dist/es/constants/math.d.ts +4 -0
- package/dist/es/constants/math.mjs +11 -0
- package/dist/es/constants/regexp.d.ts +4 -0
- package/dist/es/constants/regexp.mjs +51 -0
- package/dist/es/constants/sort.d.ts +4 -0
- package/dist/es/constants/sort.mjs +13 -0
- package/dist/es/cookie/index.d.ts +29 -0
- package/dist/es/cookie/index.mjs +67 -0
- package/dist/es/crypto/base64/base64.d.ts +8 -0
- package/dist/es/crypto/base64/base64.mjs +531 -0
- package/dist/es/crypto/base64/index.d.ts +53 -0
- package/dist/es/crypto/base64/index.mjs +73 -0
- package/dist/es/crypto/index.d.ts +8 -0
- package/dist/es/crypto/md5/index.d.ts +26 -0
- package/dist/es/crypto/md5/index.mjs +44 -0
- package/dist/es/crypto/md5/md5.d.ts +11 -0
- package/dist/es/crypto/md5/md5.mjs +349 -0
- package/dist/es/crypto/sha256/index.d.ts +52 -0
- package/dist/es/crypto/sha256/index.mjs +86 -0
- package/dist/es/crypto/sha256/sha256.d.ts +82 -0
- package/dist/es/crypto/sha256/sha256.mjs +548 -0
- package/dist/es/crypto/sm3/index.d.ts +13 -0
- package/dist/es/crypto/sm3/index.mjs +24 -0
- package/dist/es/crypto/sm3/sm3.d.ts +3 -0
- package/dist/es/crypto/sm3/sm3.mjs +197 -0
- package/dist/es/crypto/sm4/index.d.ts +56 -0
- package/dist/es/crypto/sm4/index.mjs +95 -0
- package/dist/es/crypto/sm4/sm4.d.ts +48 -0
- package/dist/es/crypto/sm4/sm4.mjs +490 -0
- package/dist/es/date/index.d.ts +608 -0
- package/dist/es/date/index.mjs +1222 -0
- package/dist/es/desensitized/index.d.ts +41 -0
- package/dist/es/desensitized/index.mjs +72 -0
- package/dist/es/device/index.d.ts +73 -0
- package/dist/es/device/index.mjs +140 -0
- package/dist/es/dom/index.d.ts +60 -0
- package/dist/es/dom/index.mjs +122 -0
- package/dist/es/file/index.d.ts +93 -0
- package/dist/es/file/index.mjs +327 -0
- package/dist/es/function/index.d.ts +26 -0
- package/dist/es/function/index.mjs +68 -0
- package/dist/es/id/index.d.ts +3 -0
- package/dist/es/id/index.mjs +6 -2
- package/dist/es/index.d.ts +26 -2
- package/dist/es/index.mjs +40 -4
- package/dist/es/keycode/index.d.ts +12 -0
- package/dist/es/keycode/index.mjs +27 -0
- package/dist/es/math/index.d.ts +66 -0
- package/dist/es/math/index.mjs +300 -0
- package/dist/es/number/index.d.ts +14 -0
- package/dist/es/number/index.mjs +31 -0
- package/dist/es/object/index.d.ts +84 -0
- package/dist/es/object/index.mjs +306 -0
- package/dist/es/pagination/index.d.ts +67 -0
- package/dist/es/pagination/index.mjs +140 -0
- package/dist/es/random/index.d.ts +18 -0
- package/dist/es/random/index.mjs +24 -0
- package/dist/es/regexp/index.d.ts +63 -0
- package/dist/es/regexp/index.mjs +92 -0
- package/dist/es/storage/index.d.ts +13 -0
- package/dist/es/storage/index.mjs +12 -0
- package/dist/es/storage/localStorage.d.ts +21 -0
- package/dist/es/storage/localStorage.mjs +32 -0
- package/dist/es/storage/sessionStorage.d.ts +21 -0
- package/dist/es/storage/sessionStorage.mjs +32 -0
- package/dist/es/string/index.d.ts +124 -0
- package/dist/es/string/index.mjs +342 -0
- package/dist/es/url/index.d.ts +118 -0
- package/dist/es/url/index.mjs +243 -0
- package/dist/es/validate/index.d.ts +231 -0
- package/dist/es/validate/index.mjs +447 -0
- package/dist/index.d.ts +2394 -2
- package/dist/lib/index.full.umd.js +8059 -29
- package/dist/lib/index.full.umd.min.js +2 -2
- package/dist/lib/index.full.umd.min.js.map +1 -1
- package/dist/resolver/auto-imports.cjs +345 -2
- package/dist/resolver/auto-imports.mjs +345 -2
- package/dist/resolver/index.cjs +1 -2
- package/dist/resolver/index.d.ts +1 -1
- package/dist/resolver/index.mjs +1 -2
- package/package.json +16 -7
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @module 字符串
|
|
5
|
+
*/
|
|
6
|
+
/* 字符串处理 */
|
|
7
|
+
/**
|
|
8
|
+
* 字符串中是否包含指定的元素
|
|
9
|
+
* @param {string} value 包含的元素
|
|
10
|
+
* @param {string} str 查找的字符串
|
|
11
|
+
* @returns {boolean} 返回true和false
|
|
12
|
+
*/
|
|
13
|
+
function inString(value, str) {
|
|
14
|
+
return str.includes(value);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 去除字符串前后位置空格
|
|
18
|
+
* @param {string} value 参数
|
|
19
|
+
* @returns {string} 返回处理后的字符串
|
|
20
|
+
*/
|
|
21
|
+
function trim(value) {
|
|
22
|
+
return value.replace(/(^\s*)|(\s*$)/g, "");
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 去除字符串开始位置的空格
|
|
26
|
+
* @param {string} value 参数
|
|
27
|
+
* @returns {string} 返回处理后的字符串
|
|
28
|
+
*/
|
|
29
|
+
function trimStart(value) {
|
|
30
|
+
return value.replace(/(^\s*)/g, "");
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 去除字符串结束位置的空格
|
|
34
|
+
* @param {string} value 参数
|
|
35
|
+
* @returns {string} 返回处理后的字符串
|
|
36
|
+
*/
|
|
37
|
+
function trimEnd(value) {
|
|
38
|
+
return value.replace(/(\s*$)/g, "");
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 去除字符串中全部的空格
|
|
42
|
+
* @param {string} value 参数
|
|
43
|
+
* @returns {string} 返回处理后的字符串
|
|
44
|
+
*/
|
|
45
|
+
function trimAll(value) {
|
|
46
|
+
return value.replace(/\s+/g, "");
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 替换所有指定字符串为新的字符串
|
|
50
|
+
* @param {string} value 参数
|
|
51
|
+
* @param {string} oldSubstr 需要替换的字符串
|
|
52
|
+
* @param {string} newSubstr 替换后的字符串
|
|
53
|
+
* @returns {string} 返回处理后的字符串
|
|
54
|
+
*/
|
|
55
|
+
function replaceAll(value, oldSubstr, newSubstr) {
|
|
56
|
+
return value.replace(new RegExp(oldSubstr, "gm"), newSubstr);
|
|
57
|
+
}
|
|
58
|
+
/* 字符串转换 */
|
|
59
|
+
/**
|
|
60
|
+
* 字符串转大写
|
|
61
|
+
* @param {string} value 参数
|
|
62
|
+
* @returns {string} 返回处理后的字符串
|
|
63
|
+
*/
|
|
64
|
+
function toUpperCase(value) {
|
|
65
|
+
return String(value).toLocaleUpperCase();
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* 字符串转小写
|
|
69
|
+
* @param {string} value 参数
|
|
70
|
+
* @returns {string} 返回处理后的字符串
|
|
71
|
+
*/
|
|
72
|
+
function toLowerCase(value) {
|
|
73
|
+
return String(value).toLocaleLowerCase();
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* 转为 snake_case 下划线命名
|
|
77
|
+
* @description 支持 驼峰命名,短横命名,帕斯卡命名
|
|
78
|
+
* @param {string} value 参数
|
|
79
|
+
* @returns {string} 返回处理后的字符串
|
|
80
|
+
*/
|
|
81
|
+
function toSnakeCase(value) {
|
|
82
|
+
// 驼峰
|
|
83
|
+
if (/^[a-z]$/.test(value.charAt(0)) && !(value.indexOf("-") > 0 || value.indexOf("_") > 0)) {
|
|
84
|
+
return value.replace(/([A-Z])/g, "_$1").toLowerCase();
|
|
85
|
+
}
|
|
86
|
+
// 短横
|
|
87
|
+
if (value.indexOf("-") > 0) {
|
|
88
|
+
return value.replace(/-/g, "_").toLowerCase();
|
|
89
|
+
}
|
|
90
|
+
// 帕斯卡
|
|
91
|
+
if (/^[A-Z]$/.test(value.charAt(0)) && !(value.indexOf("-") > 0 || value.indexOf("_") > 0)) {
|
|
92
|
+
value = value.charAt(0).toLowerCase() + value.slice(1);
|
|
93
|
+
return value.replace(/([A-Z])/g, "_$1").toLowerCase();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* 转为 kebab-case 短横命名
|
|
98
|
+
* @description 支持 下划线,驼峰命名,帕斯卡命名
|
|
99
|
+
* @param {string} value 参数
|
|
100
|
+
* @returns {string} 返回处理后的字符串
|
|
101
|
+
*/
|
|
102
|
+
function toKebabCase(value) {
|
|
103
|
+
// 下划线
|
|
104
|
+
if (value.indexOf("_") > 0) {
|
|
105
|
+
return value.replace(/_/g, "-").toLowerCase();
|
|
106
|
+
}
|
|
107
|
+
// 驼峰
|
|
108
|
+
if (/^[a-z]$/.test(value.charAt(0)) && !(value.indexOf("-") > 0 || value.indexOf("_") > 0)) {
|
|
109
|
+
return value.replace(/([A-Z])/g, "-$1").toLowerCase();
|
|
110
|
+
}
|
|
111
|
+
// 帕斯卡
|
|
112
|
+
if (/^[A-Z]$/.test(value.charAt(0)) && !(value.indexOf("-") > 0 || value.indexOf("_") > 0)) {
|
|
113
|
+
const newStr = value.charAt(0).toLowerCase() + value.slice(1);
|
|
114
|
+
return newStr.replace(/([A-Z])/g, "-$1").toLowerCase();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* 转为 camelCase 驼峰命名
|
|
119
|
+
* @description 支持 下划线命名,短横命名,帕斯卡命名
|
|
120
|
+
* @param {string} value 参数
|
|
121
|
+
* @returns {string} 返回处理后的字符串
|
|
122
|
+
*/
|
|
123
|
+
function toCamelCase(value) {
|
|
124
|
+
// 下划线
|
|
125
|
+
if (value.indexOf("_") > 0) {
|
|
126
|
+
return value.replace(/\_(\w)/g, function (all, letter) {
|
|
127
|
+
return letter.toUpperCase();
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
// 短横
|
|
131
|
+
else if (value.indexOf("-") > 0) {
|
|
132
|
+
return value.replace(/\-(\w)/g, function (all, letter) {
|
|
133
|
+
return letter.toUpperCase();
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
// 帕斯卡
|
|
137
|
+
else if (/^[A-Z]$/.test(value.charAt(0)) && !(value.indexOf("-") > 0 || value.indexOf("_") > 0)) {
|
|
138
|
+
return value.charAt(0).toLowerCase() + value.slice(1);
|
|
139
|
+
}
|
|
140
|
+
// 返回自身
|
|
141
|
+
else {
|
|
142
|
+
return value;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* 转为 PascalCase 帕斯卡命名
|
|
147
|
+
* @description 支持 下划线命名,短横命名,驼峰命名
|
|
148
|
+
* @param {string} value 参数
|
|
149
|
+
* @returns {string} 返回处理后的字符串
|
|
150
|
+
*/
|
|
151
|
+
function toPascalCase(value) {
|
|
152
|
+
// 下划线
|
|
153
|
+
if (value.indexOf("_") > 0) {
|
|
154
|
+
const newStr = value.replace(/\_(\w)/g, function (all, letter) {
|
|
155
|
+
return letter.toUpperCase();
|
|
156
|
+
});
|
|
157
|
+
return newStr.charAt(0).toUpperCase() + newStr.slice(1);
|
|
158
|
+
}
|
|
159
|
+
// 短横
|
|
160
|
+
else if (value.indexOf("-") > 0) {
|
|
161
|
+
const newStr = value.replace(/\-(\w)/g, function (all, letter) {
|
|
162
|
+
return letter.toUpperCase();
|
|
163
|
+
});
|
|
164
|
+
return newStr.charAt(0).toUpperCase() + newStr.slice(1);
|
|
165
|
+
}
|
|
166
|
+
// 驼峰
|
|
167
|
+
else if (/^[a-z]$/.test(value.charAt(0)) && !(value.indexOf("-") > 0 || value.indexOf("_") > 0)) {
|
|
168
|
+
return value.charAt(0).toUpperCase() + value.slice(1);
|
|
169
|
+
}
|
|
170
|
+
// 返回自身
|
|
171
|
+
else {
|
|
172
|
+
return value;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/* 字符串格式化 */
|
|
176
|
+
/**
|
|
177
|
+
* 数字前补齐0达到指定位数
|
|
178
|
+
* @description 相当于原生的 padStart(2,'0')
|
|
179
|
+
* @param {number|string} value 补零的数字
|
|
180
|
+
* @param {number} maxLength 补齐0后的最大长度,默认2位
|
|
181
|
+
* @returns {string} 返回补0后指定位数的字符串
|
|
182
|
+
*/
|
|
183
|
+
function zeroStart(value, maxLength = 2) {
|
|
184
|
+
let len = value.toString().length;
|
|
185
|
+
while (len < maxLength) {
|
|
186
|
+
value = "0" + value;
|
|
187
|
+
len++;
|
|
188
|
+
}
|
|
189
|
+
return value;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* 数字后补齐0达到指定位数
|
|
193
|
+
* @description 相当于原生的 padEnd(2,'0')
|
|
194
|
+
* @param {number|string} value 补零的数字
|
|
195
|
+
* @param {number} maxLength 补齐0后的最大长度,默认2位
|
|
196
|
+
* @returns {string} 返回补0后指定位数的字符串
|
|
197
|
+
*/
|
|
198
|
+
function zeroEnd(value, maxLength = 2) {
|
|
199
|
+
let len = value.toString().length;
|
|
200
|
+
while (len < maxLength) {
|
|
201
|
+
value = value + "0";
|
|
202
|
+
len++;
|
|
203
|
+
}
|
|
204
|
+
return value;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* 格式化为标题样式
|
|
208
|
+
* @param {string} value 字符串值
|
|
209
|
+
* @returns {string} 返回格式化后的标题样式
|
|
210
|
+
*/
|
|
211
|
+
function formatTitle(value) {
|
|
212
|
+
if (!value)
|
|
213
|
+
return "";
|
|
214
|
+
return value
|
|
215
|
+
.split(/(?=[A-Z])|[\.\-\s_]/)
|
|
216
|
+
.map((s) => s.trim())
|
|
217
|
+
.filter((s) => !!s)
|
|
218
|
+
.map((s) => toPascalCase(s.toLowerCase()))
|
|
219
|
+
.join(" ");
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* 格式化字符串模版
|
|
223
|
+
* @param {string} value 字符串值
|
|
224
|
+
* @param {Object} data 模版数据
|
|
225
|
+
* @returns {string} 返回格式化后的模版字符串
|
|
226
|
+
*/
|
|
227
|
+
function formatTemplate(value, data) {
|
|
228
|
+
if (!value)
|
|
229
|
+
return "";
|
|
230
|
+
return Array.from(value.matchAll(/\{\{(.+?)\}\}/g)).reduce((acc, match) => {
|
|
231
|
+
return acc.replace(match[0], data[match[1]]);
|
|
232
|
+
}, value);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* 格式化千分位数字
|
|
236
|
+
* @description 支持任意数据传参,如果非数字则不会格式化,并返回原数据
|
|
237
|
+
* @param {number|string} num 数字
|
|
238
|
+
* @returns {string} 返回格式化后的千分位数字
|
|
239
|
+
*/
|
|
240
|
+
function formatThousand(num) {
|
|
241
|
+
if (!parseFloat(String(num)))
|
|
242
|
+
return String(num);
|
|
243
|
+
num = String(num);
|
|
244
|
+
const regex = num.indexOf(".") > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g;
|
|
245
|
+
return num.replace(regex, "$1,");
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* 格式化人民币金额大写
|
|
249
|
+
* @param {number|string} money 金额
|
|
250
|
+
* @returns {string} 返回金额大写
|
|
251
|
+
*/
|
|
252
|
+
function formatRmbChinese(money) {
|
|
253
|
+
// 汉字的数字
|
|
254
|
+
const cnNums = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"];
|
|
255
|
+
// 基本单位
|
|
256
|
+
const cnIntRadiance = ["", "拾", "佰", "仟"];
|
|
257
|
+
// 对应整数部分扩展单位
|
|
258
|
+
const cnIntUnits = ["", "万", "亿", "兆"];
|
|
259
|
+
// 对应小数部分单位
|
|
260
|
+
const cnDecUnits = ["角", "分", "毫", "厘"];
|
|
261
|
+
// 整数金额时后面跟的字符
|
|
262
|
+
const cnInteger = "整";
|
|
263
|
+
// 整型完以后的单位
|
|
264
|
+
const cnIntLast = "元";
|
|
265
|
+
// 最大处理的数字
|
|
266
|
+
const maxNum = Number("999999999999999.9999");
|
|
267
|
+
// 金额整数部分
|
|
268
|
+
let integerNum;
|
|
269
|
+
// 金额小数部分
|
|
270
|
+
let decimalNum;
|
|
271
|
+
// 输出的中文金额字符串
|
|
272
|
+
let chineseStr = "";
|
|
273
|
+
// 分离金额后用的数组,预定义
|
|
274
|
+
let parts;
|
|
275
|
+
if (money === "") {
|
|
276
|
+
// 不能用==
|
|
277
|
+
return "";
|
|
278
|
+
}
|
|
279
|
+
money = parseFloat(String(money));
|
|
280
|
+
if (money >= maxNum) {
|
|
281
|
+
// 超出最大处理数字,抛出异常
|
|
282
|
+
throw new Error("Calculated number overflow!");
|
|
283
|
+
}
|
|
284
|
+
if (money === 0) {
|
|
285
|
+
chineseStr = cnNums[0] + cnIntLast + cnInteger;
|
|
286
|
+
return chineseStr;
|
|
287
|
+
}
|
|
288
|
+
// 转换为字符串
|
|
289
|
+
money = money.toString();
|
|
290
|
+
if (money.indexOf(".") === -1) {
|
|
291
|
+
integerNum = money;
|
|
292
|
+
decimalNum = "";
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
parts = money.split(".");
|
|
296
|
+
integerNum = parts[0];
|
|
297
|
+
decimalNum = parts[1].substr(0, 4);
|
|
298
|
+
}
|
|
299
|
+
// 获取整型部分转换
|
|
300
|
+
if (parseInt(integerNum, 10) > 0) {
|
|
301
|
+
let zeroCount = 0;
|
|
302
|
+
const IntLen = integerNum.length;
|
|
303
|
+
for (let i = 0; i < IntLen; i++) {
|
|
304
|
+
const n = integerNum.substr(i, 1);
|
|
305
|
+
const p = IntLen - i - 1;
|
|
306
|
+
const q = p / 4;
|
|
307
|
+
const m = p % 4;
|
|
308
|
+
if (n === "0") {
|
|
309
|
+
zeroCount++;
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
if (zeroCount > 0) {
|
|
313
|
+
chineseStr += cnNums[0];
|
|
314
|
+
}
|
|
315
|
+
// 归零
|
|
316
|
+
zeroCount = 0;
|
|
317
|
+
chineseStr += cnNums[parseInt(n)] + cnIntRadiance[m];
|
|
318
|
+
}
|
|
319
|
+
if (m === 0 && zeroCount < 4) {
|
|
320
|
+
chineseStr += cnIntUnits[q];
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
chineseStr += cnIntLast;
|
|
324
|
+
}
|
|
325
|
+
// 小数部分
|
|
326
|
+
if (decimalNum !== "") {
|
|
327
|
+
const decLen = decimalNum.length;
|
|
328
|
+
for (let i = 0; i < decLen; i++) {
|
|
329
|
+
const n = decimalNum.substr(i, 1);
|
|
330
|
+
if (n !== "0") {
|
|
331
|
+
chineseStr += cnNums[Number(n)] + cnDecUnits[i];
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
if (chineseStr === "") {
|
|
336
|
+
chineseStr += cnNums[0] + cnIntLast + cnInteger;
|
|
337
|
+
}
|
|
338
|
+
else if (decimalNum === "") {
|
|
339
|
+
chineseStr += cnInteger;
|
|
340
|
+
}
|
|
341
|
+
return chineseStr;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
exports.formatRmbChinese = formatRmbChinese;
|
|
345
|
+
exports.formatTemplate = formatTemplate;
|
|
346
|
+
exports.formatThousand = formatThousand;
|
|
347
|
+
exports.formatTitle = formatTitle;
|
|
348
|
+
exports.inString = inString;
|
|
349
|
+
exports.replaceAll = replaceAll;
|
|
350
|
+
exports.toCamelCase = toCamelCase;
|
|
351
|
+
exports.toKebabCase = toKebabCase;
|
|
352
|
+
exports.toLowerCase = toLowerCase;
|
|
353
|
+
exports.toPascalCase = toPascalCase;
|
|
354
|
+
exports.toSnakeCase = toSnakeCase;
|
|
355
|
+
exports.toUpperCase = toUpperCase;
|
|
356
|
+
exports.trim = trim;
|
|
357
|
+
exports.trimAll = trimAll;
|
|
358
|
+
exports.trimEnd = trimEnd;
|
|
359
|
+
exports.trimStart = trimStart;
|
|
360
|
+
exports.zeroEnd = zeroEnd;
|
|
361
|
+
exports.zeroStart = zeroStart;
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var regexp = require('../constants/regexp.cjs');
|
|
4
|
+
var index = require('../validate/index.cjs');
|
|
5
|
+
var index$1 = require('../array/index.cjs');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @module 浏览器Url
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* 获得协议名
|
|
12
|
+
* @param {string} url url地址,默认当前url地址
|
|
13
|
+
* @returns {string} 返回协议名
|
|
14
|
+
*/
|
|
15
|
+
function getProtocol(url = window.location.href) {
|
|
16
|
+
const match = url.match(regexp.REGEXP.URL);
|
|
17
|
+
if (match) {
|
|
18
|
+
return match[1] || "";
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 获得主机地址
|
|
23
|
+
* @param {string} url url地址,默认当前url地址
|
|
24
|
+
* @returns {string} 返回主机地址
|
|
25
|
+
*/
|
|
26
|
+
function getHost(url = window.location.href) {
|
|
27
|
+
const match = url.match(regexp.REGEXP.URL);
|
|
28
|
+
if (match) {
|
|
29
|
+
return (match[2] || "") + (match[3] ? ":" + match[3] : "");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 获得主机名称
|
|
34
|
+
* @param {string} url url地址,默认当前url地址
|
|
35
|
+
* @returns {string} 返回主机名称
|
|
36
|
+
*/
|
|
37
|
+
function getHostName(url = window.location.href) {
|
|
38
|
+
const match = url.match(regexp.REGEXP.URL);
|
|
39
|
+
if (match) {
|
|
40
|
+
return match[2] || "";
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 获得端口号
|
|
45
|
+
* @param {string} url url地址,默认当前url地址
|
|
46
|
+
* @returns {string} 返回端口号
|
|
47
|
+
*/
|
|
48
|
+
function getPort(url = window.location.href) {
|
|
49
|
+
const match = url.match(regexp.REGEXP.URL);
|
|
50
|
+
if (match) {
|
|
51
|
+
return match[3] || "";
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 获得地址路径
|
|
56
|
+
* @param {string} url url地址,默认当前url地址
|
|
57
|
+
* @returns {string} 返回地址路径
|
|
58
|
+
*/
|
|
59
|
+
function getUrlPath(url = window.location.href) {
|
|
60
|
+
const match = url.match(regexp.REGEXP.URL);
|
|
61
|
+
if (match) {
|
|
62
|
+
return match[4] || "";
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 获得hash字符串
|
|
67
|
+
* @param {string} url url地址,默认当前url地址
|
|
68
|
+
* @returns {string} 返回hash字符串
|
|
69
|
+
*/
|
|
70
|
+
function getUrlHash(url = window.location.href) {
|
|
71
|
+
const match = url.match(regexp.REGEXP.URL);
|
|
72
|
+
if (match) {
|
|
73
|
+
return match[6] || "";
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* 获得查询参数字符串
|
|
78
|
+
* @param {string} url url地址,默认当前url地址
|
|
79
|
+
* @returns {string} 返回查询参数字符串
|
|
80
|
+
*/
|
|
81
|
+
function getSearchString(url = window.location.href) {
|
|
82
|
+
const match = url.match(regexp.REGEXP.URL);
|
|
83
|
+
if (match) {
|
|
84
|
+
return match[5] || "";
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 查询参数字符串中是否包含某个参数
|
|
89
|
+
* @param {string} url url地址,默认当前url地址
|
|
90
|
+
* @param {string} name 参数名
|
|
91
|
+
* @returns {boolean} 返回结果
|
|
92
|
+
*/
|
|
93
|
+
function hasSearchParam(url = window.location.href, name) {
|
|
94
|
+
const params = parseSearchParam(url);
|
|
95
|
+
return params[name] !== undefined;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* 查询参数字符串中获得某个参数的值
|
|
99
|
+
* @param {string} url url地址,默认当前url地址
|
|
100
|
+
* @param {string} name 参数名
|
|
101
|
+
* @returns {string} 返回查询到的值
|
|
102
|
+
*/
|
|
103
|
+
function getSearchParam(url = window.location.href, name = "") {
|
|
104
|
+
name = name.replace(/[[\]]/g, "\\$&");
|
|
105
|
+
url = getSearchString(url) || "";
|
|
106
|
+
const reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
|
|
107
|
+
const match = url.substring(0).match(reg);
|
|
108
|
+
if (match) {
|
|
109
|
+
return decodeURIComponent(match[2]);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* 查询参数字符串中设置某个参数的值
|
|
114
|
+
* @param {string} name 参数名
|
|
115
|
+
* @param {string|number|Array} value 参数值,如果是数组,则解析为:&ids[0]=1&ids[2]=2
|
|
116
|
+
* @param {string} url url地址,默认当前url地址
|
|
117
|
+
* @returns {string} 返回查询参数字符串
|
|
118
|
+
*/
|
|
119
|
+
function setSearchParam(url = window.location.href, name = "", value) {
|
|
120
|
+
const params = parseSearchParam(url);
|
|
121
|
+
params[name] = value;
|
|
122
|
+
// 返回替换后的url
|
|
123
|
+
return url.replace(/(\?.+?)(?=#|$)/, "?" + stringifySearchParam(params));
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* 查询参数字符串转为对象
|
|
127
|
+
* @param {string} url url地址,默认当前url地址
|
|
128
|
+
* @returns {Object} 返回参数对象
|
|
129
|
+
*/
|
|
130
|
+
function parseSearchParam(url = window.location.href) {
|
|
131
|
+
const searchString = getSearchString(url) || "";
|
|
132
|
+
const searchArr = searchString.split("&");
|
|
133
|
+
const param = {};
|
|
134
|
+
for (let i = 0; i < searchArr.length; i++) {
|
|
135
|
+
const arr = searchArr[i].split("=");
|
|
136
|
+
param[decodeURIComponent(arr[0])] = decodeURIComponent(arr[1] || "");
|
|
137
|
+
}
|
|
138
|
+
return param;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* 对象转为查询参数字符串
|
|
142
|
+
* @param {Object} params 参数对象
|
|
143
|
+
* @param {string} url url地址,如果不为空,则会拼接好查询参数字符串的url地址
|
|
144
|
+
* @returns {string} 返回参数字符串
|
|
145
|
+
*/
|
|
146
|
+
function stringifySearchParam(params, url = "") {
|
|
147
|
+
if (typeof params !== "object")
|
|
148
|
+
return params;
|
|
149
|
+
const arr = [];
|
|
150
|
+
for (const key in params) {
|
|
151
|
+
const value = params[key];
|
|
152
|
+
if (index.isArray(value)) {
|
|
153
|
+
for (let i = 0; i < value.length; ++i) {
|
|
154
|
+
arr.push(encodeURIComponent(key + "[" + i + "]") + "=" + encodeURIComponent(value[i]));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
arr.push(encodeURIComponent(key) + "=" + encodeURIComponent(params[key]));
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// 如果url不为空,则会返回拼接好url字符串
|
|
162
|
+
if (url) {
|
|
163
|
+
return url.replace(/(\?.+?)(?=#|$)/, "?" + arr.join("&"));
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
return arr.join("&");
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* 查询参数字符串中在最前面追加新参数和值
|
|
171
|
+
* @param {string} url url地址,默认当前url地址
|
|
172
|
+
* @param {string} name 参数名
|
|
173
|
+
* @param {string|number|Array} value 参数值,如果是数组,则解析为:&ids[0]=1&ids[2]=2
|
|
174
|
+
* @returns {string} 返回查询参数字符串
|
|
175
|
+
*/
|
|
176
|
+
function prependSearchParam(url = window.location.href, name, value) {
|
|
177
|
+
const searchArr = (getSearchString(url) || "").split("&") || [];
|
|
178
|
+
if (Array.isArray(value)) {
|
|
179
|
+
const arr = [];
|
|
180
|
+
for (let i = 0; i < value.length; i++) {
|
|
181
|
+
arr.push(`${encodeURIComponent(name)}[${i}]=${encodeURIComponent(value[i])}`);
|
|
182
|
+
}
|
|
183
|
+
searchArr.unshift(...arr);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
searchArr.unshift(`${encodeURIComponent(name)}=${encodeURIComponent(value)}`);
|
|
187
|
+
}
|
|
188
|
+
return url.replace(/(\?.+?)(?=#|$)/, "?" + searchArr.join("&"));
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* 查询参数字符串中在某个参数的前面追加新参数和值
|
|
192
|
+
* @param {string} url url地址,默认当前url地址
|
|
193
|
+
* @param {string} name 参数名
|
|
194
|
+
* @param {string|number|Array} value 参数值,如果是数组,则解析为:&ids[0]=1&ids[2]=2
|
|
195
|
+
* @param {string} beforeParam 在前面追加参数的名称
|
|
196
|
+
* @returns {string} 返回查询参数字符串
|
|
197
|
+
*/
|
|
198
|
+
function prependToSearchParam(url = window.location.href, beforeParam, name, value) {
|
|
199
|
+
const searchArr = (getSearchString(url) || "").split("&");
|
|
200
|
+
const beforeIndex = searchArr.findIndex((v) => v.includes(beforeParam));
|
|
201
|
+
const beforeArr = index$1.arrayInsertBefore(searchArr, beforeIndex, `${name}=${value}`);
|
|
202
|
+
return url.replace(/(\?.+?)(?=#|$)/, "?" + beforeArr.join("&"));
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* 查询参数字符串中在最后面追加新参数和值
|
|
206
|
+
* @param {string} url url地址,默认当前url地址
|
|
207
|
+
* @param {string} name 参数名
|
|
208
|
+
* @param {string,number,Array} value 参数值,如果是数组,则解析为:&ids[0]=1&ids[2]=2
|
|
209
|
+
* @returns {string} 返回查询参数字符串
|
|
210
|
+
*/
|
|
211
|
+
function appendSearchParam(url = window.location.href, name, value) {
|
|
212
|
+
const searchArr = (getSearchString(url) || "").split("&");
|
|
213
|
+
searchArr.push(`${name}=${value}`);
|
|
214
|
+
return url.replace(/(\?.+?)(?=#|$)/, "?" + searchArr.join("&"));
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* 查询参数字符串中在某个参数的后面追加新参数和值
|
|
218
|
+
* @param {string} url url地址,默认当前url地址
|
|
219
|
+
* @param {string} name 参数名
|
|
220
|
+
* @param {string,number,Array} value 参数值,如果是数组,则解析为:&ids[0]=1&ids[2]=2
|
|
221
|
+
* @param {string} afterName 在后面追加参数的名称
|
|
222
|
+
* @returns {string} 返回查询参数字符串
|
|
223
|
+
*/
|
|
224
|
+
function appendToSearchParam(url = window.location.href, afterName, name, value) {
|
|
225
|
+
const searchArr = (getSearchString(url) || "").split("&");
|
|
226
|
+
const beforeIndex = searchArr.findIndex((v) => v.includes(afterName));
|
|
227
|
+
const afterArr = index$1.arrayInsertAfter(searchArr, beforeIndex, `${name}=${value}`);
|
|
228
|
+
return url.replace(/(\?.+?)(?=#|$)/, "?" + afterArr.join("&"));
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* 查询参数字符串中移除某个参数和值
|
|
232
|
+
* @param {string} url url地址,默认当前url地址
|
|
233
|
+
* @param {string} name 参数名
|
|
234
|
+
* @returns {string} 返回查询参数字符串
|
|
235
|
+
*/
|
|
236
|
+
function removeSearchParam(url = window.location.href, name) {
|
|
237
|
+
const searchArr = (getSearchString(url) || "").split("&");
|
|
238
|
+
const delIndex = searchArr.findIndex((v) => v.includes(name));
|
|
239
|
+
if (delIndex > -1) {
|
|
240
|
+
searchArr.splice(delIndex, 1);
|
|
241
|
+
}
|
|
242
|
+
return url.replace(/(\?.+?)(?=#|$)/, "?" + searchArr.join("&"));
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
exports.appendSearchParam = appendSearchParam;
|
|
246
|
+
exports.appendToSearchParam = appendToSearchParam;
|
|
247
|
+
exports.getHost = getHost;
|
|
248
|
+
exports.getHostName = getHostName;
|
|
249
|
+
exports.getPort = getPort;
|
|
250
|
+
exports.getProtocol = getProtocol;
|
|
251
|
+
exports.getSearchParam = getSearchParam;
|
|
252
|
+
exports.getSearchString = getSearchString;
|
|
253
|
+
exports.getUrlHash = getUrlHash;
|
|
254
|
+
exports.getUrlPath = getUrlPath;
|
|
255
|
+
exports.hasSearchParam = hasSearchParam;
|
|
256
|
+
exports.parseSearchParam = parseSearchParam;
|
|
257
|
+
exports.prependSearchParam = prependSearchParam;
|
|
258
|
+
exports.prependToSearchParam = prependToSearchParam;
|
|
259
|
+
exports.removeSearchParam = removeSearchParam;
|
|
260
|
+
exports.setSearchParam = setSearchParam;
|
|
261
|
+
exports.stringifySearchParam = stringifySearchParam;
|