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 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
- # 第一个参数为:数据源,第二个参数选填(为补全的符号,默认为 -- ),第三个参数是数组,选填(为需要匹配的数据,如 0.00,0)
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "js_ryl",
3
- "version": "1.0.22",
3
+ "version": "1.0.23",
4
4
  "private": false,
5
5
  "description": "自定义通用js",
6
6
  "author": "renyuliang <785788909@qq.com>",
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
+ }