亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 Unicode 表情符號屬性轉義匹配數字?

為什么 Unicode 表情符號屬性轉義匹配數字?

楊__羊羊 2023-05-19 17:00:17
我發現這種使用Unicode 屬性轉義的不使用“巨大魔法范圍”的正則表達式來檢測表情符號的絕妙方法:console.log(/\p{Emoji}/u.test('flowers???????'))?//?true console.log(/\p{Emoji}/u.test('flowers'))?//?false注意到它\p{Emoji}也匹配數字!這是為什么?數字不是表情符號?console.log(/\p{Emoji}/u.test('flowers 123')) // unexpectdly true// regex-only workaround by @Bonzdragonconst regex = /(?=\p{Emoji})(?!\p{Number})/u;console.log(? regex.test('flowers'), // false, as expected? regex.test('flowers 123'), // false, as expected? regex.test('flowers 123 ??????'), // true, as expected? regex.test('flowers ??????'), // true, as expected)// more readable workaroundconst hasEmoji = str => {? const nbEmojiOrNumber = (str.match(/\p{Emoji}/gu) || []).length;? const nbNumber = (str.match(/\p{Number}/gu) || []).length;? return nbEmojiOrNumber > nbNumber;}console.log(? hasEmoji('flowers'), // false, as expected? hasEmoji('flowers 123'), // false, as expected? hasEmoji('flowers 123 ??????'), // true, as expected? hasEmoji('flowers ??????'), // true, as expected)
查看完整描述

1 回答

?
慕少森

TA貢獻2019條經驗 獲得超9個贊

digtis、、、#ZWJ*和更多字符包含Emoji設置為Yes 的屬性,這意味著數字被認為是有效的表情符號字符


0023? ? ? ? ? ; Emoji_Component? ? ? #? 1.1? [1] (#?)? ? ? ?number sign

002A? ? ? ? ? ; Emoji_Component? ? ? #? 1.1? [1] (*?)? ? ? ?asterisk

0030..0039? ? ; Emoji_Component? ? ? #? 1.1 [10] (0?..9?)? ? digit zero..digit nine

200D? ? ? ? ? ; Emoji_Component? ? ? #? 1.1? [1] (?)? ? ? ? zero width joiner

20E3? ? ? ? ? ; Emoji_Component? ? ? #? 3.0? [1] (?)? ? ? ?combining enclosing keycap

FE0F? ? ? ? ? ; Emoji_Component? ? ? #? 3.2? [1] ()? ? ? ? VARIATION SELECTOR-16

1F1E6..1F1FF? ; Emoji_Component? ? ? #? 6.0 [26] (??..??)? ? regional indicator symbol letter a..regional indicator symbol letter z

1F3FB..1F3FF? ; Emoji_Component? ? ? #? 8.0? [5] (??..??)? ? light skin tone..dark skin tone

1F9B0..1F9B3? ; Emoji_Component? ? ? # 11.0? [4] (??..??)? ? red-haired..white-haired

E0020..E007F? ; Emoji_Component? ? ? #? 3.1 [96] (??..??)? ? ? tag space..cancel tag

例如,是一個數字,但與和字符1組合時變成表情符號:1??:U+FE0FU+20E3


console.log("1\uFE0F\u20E3 2\uFE0F\u20E3 3\uFE0F\u20E3 4\uFE0F\u20E3 5\uFE0F\u20E3 6\uFE0F\u20E3 7\uFE0F\u20E3 8\uFE0F\u20E3 9\uFE0F\u20E3 0\uFE0F\u20E3")

如果要避免匹配數字,請使用Extended_PictographicUnicode 類


查看完整回答
反對 回復 2023-05-19
  • 1 回答
  • 0 關注
  • 205 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號