如何区分单个ASCII字符与Emoji字符序列?
如何区分单个ASCII字符与Emoji字符序列?
需求:给定字符串中的元素仅为单个ASCII字符或Emoji字符序列,需要将ASCII字符归为一组,Emoji逐个单独区分。已知通过for (..of)遍历混合字符串可分别获取单个ASCII字符或Emoji子串,请实现seeIfAscii函数判断字符类型。
完整代码实现
const text = 'abc👨👩👧👦def😀ghi'; for (const char of text) { // 此处char为单个ASCII字符或Emoji序列字符串 if (seeIfAscii(char)) { console.log('ASCII', char); } else { console.log('Emoji', char); } } function seeIfAscii(char) { // 判断逻辑:单个ASCII字符长度为1,且码点在0x00-0x7F范围内 return char.length === 1 && char.codePointAt(0) <= 0x7F; }
实现思路
- ASCII字符的Unicode码点范围是
0x00(十进制0)到0x7F(十进制127),且单个ASCII字符的字符串长度为1 - 无论是单个Emoji还是组合型Emoji(如👨👩👧👦),其码点均超出ASCII范围,且组合Emoji的字符串长度大于1
- 使用
codePointAt(0)而非charCodeAt(0):确保能正确处理超出U+FFFF范围的Unicode字符(部分复杂Emoji属于此类)
内容的提问来源于stack exchange,提问作者Trident D'Gao
相关产品推荐
相关产品推荐

