js_ryl 1.0.22 → 1.0.23
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 +8 -1
- package/package.json +1 -1
- package/src/App.vue +7 -0
- package/src/emoji/index.js +74 -0
package/README.md
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
8.验证码 -- verCode
|
|
19
19
|
9.table中的数据补全方法 -- filterTable
|
|
20
20
|
10.获取当前年份中,指定月份的天数 -- getMonthDays
|
|
21
|
+
11.unicode转化emoji表情 -- emoji
|
|
21
22
|
|
|
22
23
|
# 使用方法:
|
|
23
24
|
|
|
@@ -154,7 +155,7 @@
|
|
|
154
155
|
|
|
155
156
|
#9.table中的数据补全方法 -- filterTable
|
|
156
157
|
|
|
157
|
-
# 第一个参数为:数据源,第二个参数选填(为补全的符号,默认为 -- )
|
|
158
|
+
# 第一个参数为:数据源,第二个参数选填(为补全的符号,默认为 -- ),第三个参数是 ”数组“ ,选填(为需要匹配的数据,如 0.00,0)
|
|
158
159
|
let list = filterTable(data)
|
|
159
160
|
|
|
160
161
|
#10.获取当前年份中,指定月份的天数
|
|
@@ -162,6 +163,11 @@
|
|
|
162
163
|
#第一个参数为:年份,第二个参数为:月份
|
|
163
164
|
let day = getMonthDays(year,month)
|
|
164
165
|
|
|
166
|
+
#11.unicode转化emoji表情,如果不符合emoji的要求,则转化为字符,如果还不符合,则输出原unicode
|
|
167
|
+
|
|
168
|
+
# 方法:
|
|
169
|
+
# emoji()
|
|
170
|
+
|
|
165
171
|
|
|
166
172
|
|
|
167
173
|
# serve with hot reload at localhost:8080
|
|
@@ -183,6 +189,7 @@
|
|
|
183
189
|
#1.0.19: 验证手机号码 优化
|
|
184
190
|
#1.0.21: number精度问题优化
|
|
185
191
|
#1.0.22: 数据补全方法优化
|
|
192
|
+
#1.0.23: 数据补全方法优化
|
|
186
193
|
```
|
|
187
194
|
|
|
188
195
|
For detailed explanation on how things work, consult the [docs for vue-loader](http://vuejs.github.io/vue-loader).
|
package/package.json
CHANGED
package/src/App.vue
CHANGED
|
@@ -43,6 +43,7 @@ import deepCopy from "./deepCopy";
|
|
|
43
43
|
import verCode from "./verCode";
|
|
44
44
|
import filterTable from "./filterTable";
|
|
45
45
|
import getMonthDays from "./getMonthDays";
|
|
46
|
+
import emoji from "./emoji";
|
|
46
47
|
export default {
|
|
47
48
|
data() {
|
|
48
49
|
return {
|
|
@@ -132,6 +133,12 @@ export default {
|
|
|
132
133
|
console.log(arr002,arr00),
|
|
133
134
|
|
|
134
135
|
console.log(getMonthDays(2022,11), '// 获取当前年份中,指定月份的天数')
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
const emojiEx = "A0 [u+1BE4] U+1F600 \\u{1F602} U+123456";
|
|
139
|
+
const output = emoji(emojiEx);
|
|
140
|
+
console.log(output);
|
|
141
|
+
|
|
135
142
|
},
|
|
136
143
|
methods: {
|
|
137
144
|
phoneCode(e){
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// 主转换函数
|
|
2
|
+
export default function emoji(str) {
|
|
3
|
+
// 支持多种 Unicode 表示格式:U+xxxx, [u+xxxx], \u{xxxx}
|
|
4
|
+
const regex = /U\+([0-9A-Fa-f]{4,6})|\[u\+([0-9A-Fa-f]{4,6})\]|\\u\{([0-9A-Fa-f]{4,6})\}/g;
|
|
5
|
+
|
|
6
|
+
return str.replace(regex, (match, p1, p2, p3) => {
|
|
7
|
+
const hexStr = p1 || p2 || p3;
|
|
8
|
+
const codePoint = parseInt(hexStr, 16);
|
|
9
|
+
|
|
10
|
+
if (isNaN(codePoint) || codePoint < 0 || codePoint > 0x10FFFF) {
|
|
11
|
+
// 非法码点,返回原字符串
|
|
12
|
+
return match;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
try {
|
|
16
|
+
const char = String.fromCodePoint(codePoint);
|
|
17
|
+
|
|
18
|
+
if (isEmoji(codePoint)) {
|
|
19
|
+
// 是 Emoji,直接返回 Emoji 字符
|
|
20
|
+
return char;
|
|
21
|
+
} else {
|
|
22
|
+
// 不是 Emoji,判断字符是否能显示
|
|
23
|
+
if (canDisplayChar(char)) {
|
|
24
|
+
return char;
|
|
25
|
+
} else {
|
|
26
|
+
// 不能显示,返回原字符串
|
|
27
|
+
return match;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
} catch (e) {
|
|
31
|
+
// 转换失败,返回原字符串
|
|
32
|
+
return match;
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const emojiRanges = [
|
|
38
|
+
[0x231A, 0x231B], [0x23E9, 0x23EC], [0x23F0, 0x23F0], [0x23F3, 0x23F3],
|
|
39
|
+
[0x25AA, 0x25AB], [0x25B6, 0x25B6], [0x25C0, 0x25C0], [0x25FB, 0x25FE],
|
|
40
|
+
[0x2600, 0x2604], [0x260E, 0x260E], [0x2611, 0x2611], [0x2614, 0x2615],
|
|
41
|
+
[0x2618, 0x2618], [0x261D, 0x261D], [0x2620, 0x2620], [0x2622, 0x2623],
|
|
42
|
+
[0x2626, 0x2626], [0x262A, 0x262A], [0x262E, 0x262F], [0x2638, 0x263A],
|
|
43
|
+
[0x2640, 0x2640], [0x2642, 0x2642], [0x2648, 0x2653], [0x265F, 0x2660],
|
|
44
|
+
[0x2663, 0x2663], [0x2665, 0x2666], [0x2668, 0x2668], [0x267B, 0x267B],
|
|
45
|
+
[0x267F, 0x267F], [0x2692, 0x2697], [0x2699, 0x2699], [0x269B, 0x269C],
|
|
46
|
+
[0x26A0, 0x26A1], [0x26AA, 0x26AB], [0x26B0, 0x26B1], [0x26BD, 0x26BE],
|
|
47
|
+
[0x26C4, 0x26C5], [0x26C8, 0x26C8], [0x26CE, 0x26CF], [0x26D1, 0x26D1],
|
|
48
|
+
[0x26D3, 0x26D4], [0x26E9, 0x26EA], [0x26F0, 0x26F5], [0x26F7, 0x26FA],
|
|
49
|
+
[0x26FD, 0x26FD], [0x2702, 0x2702], [0x2705, 0x2705], [0x2708, 0x270D],
|
|
50
|
+
[0x270F, 0x270F], [0x2712, 0x2712], [0x2714, 0x2714], [0x2716, 0x2716],
|
|
51
|
+
[0x271D, 0x271D], [0x2721, 0x2721], [0x2728, 0x2728], [0x2733, 0x2734],
|
|
52
|
+
[0x2744, 0x2744], [0x2747, 0x2747], [0x274C, 0x274C], [0x274E, 0x274E],
|
|
53
|
+
[0x2753, 0x2755], [0x2757, 0x2757], [0x2763, 0x2764], [0x2795, 0x2797],
|
|
54
|
+
[0x27A1, 0x27A1], [0x27B0, 0x27B0], [0x27BF, 0x27BF], [0x2934, 0x2935],
|
|
55
|
+
[0x2B05, 0x2B07], [0x2B1B, 0x2B1C], [0x2B50, 0x2B50], [0x2B55, 0x2B55],
|
|
56
|
+
[0x1F004, 0x1F004], [0x1F0CF, 0x1F0CF], [0x1F170, 0x1F171], [0x1F17E, 0x1F17F],
|
|
57
|
+
[0x1F18E, 0x1F18E], [0x1F191, 0x1F19A], [0x1F1E6, 0x1F1FF], [0x1F201, 0x1F202],
|
|
58
|
+
[0x1F21A, 0x1F21A], [0x1F22F, 0x1F22F], [0x1F232, 0x1F23A], [0x1F250, 0x1F251],
|
|
59
|
+
[0x1F300, 0x1F5FF], [0x1F600, 0x1F64F], [0x1F680, 0x1F6FF], [0x1F700, 0x1F77F],
|
|
60
|
+
[0x1F780, 0x1F7FF], [0x1F800, 0x1F8FF], [0x1F900, 0x1F9FF], [0x1FA00, 0x1FA6F],
|
|
61
|
+
[0x1FA70, 0x1FAFF], [0x1FB00, 0x1FBFF],
|
|
62
|
+
];
|
|
63
|
+
|
|
64
|
+
// 判断是否是 Emoji 范围内
|
|
65
|
+
function isEmoji(codePoint) {
|
|
66
|
+
return emojiRanges.some(([start, end]) => codePoint >= start && codePoint <= end);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// 判断字符是否能正常显示(简单判断,依赖浏览器或环境)
|
|
70
|
+
function canDisplayChar(char) {
|
|
71
|
+
// 这里用一个简单方法:判断字符是否是替代字符 �(U+FFFD)
|
|
72
|
+
// 如果是替代字符,说明无法显示
|
|
73
|
+
return char !== '\uFFFD';
|
|
74
|
+
}
|