正则匹配emoji字符

您所在的位置:网站首页 emoji表达 正则匹配emoji字符

正则匹配emoji字符

2023-08-17 18:02| 来源: 网络整理| 查看: 265

寻找emoji的编码范围

在这个网站中可以查看所有的emoji unicode:Emoji Unicode table

用js代码找出这个页面所有emoji unicode 的范围:

let $list = document.querySelectorAll('.category') for(let key in $list){ let text = $list[key].innerText? $list[key].innerText.replace(/(Back to top)|(\n?)/ig,'') :''; console.log(text) }

输出结果:

1. Emoticons ( 1F601 - 1F64F ) 2. Dingbats ( 2702 - 27B0 ) 3. Transport and map symbols ( 1F680 - 1F6C0 ) 4. Enclosed characters ( 24C2 - 1F251 ) 5. Uncategorized 6a. Additional emoticons ( 1F600 - 1F636 ) 6b. Additional transport and map symbols ( 1F681 - 1F6C5 ) 6c. Other additional symbols ( 1F30D - 1F567 )

ES6 新增的 Unicode 字符表示法:将码位放入大括号,就能正确解读该字符 例如 :\u{1F601}

JS emoji符号匹配

得到了emoji unicode 就学要把unicode的范围拼接起来生成正则表达式:

let $list = document.querySelectorAll('.category') let arr = [],regText = '',result; for(let key in $list){ let text = $list[key].innerText?$list[key].innerText.replace(/(Back to top)|(\n?)/ig,'') :''; result = text.match(/\(\s+([0-9a-fA-F]+)\s+-\s+([a-fA-F0-9]+)\s+\)/) if(result && result.length == 3){ regText += `\\u{${result[1]}}-\\u{${result[2]}}` } arr.push(text) } reg = new RegExp('['+regText+']','gu') console.log(reg);///[\u{1F601}-\u{1F64F}\u{2702}-\u{27B0}\u{1F680}-\u{1F6C0}\u{24C2}-\u{1F251}\u{1F600}-\u{1F636}\u{1F681}-\u{1F6C5}\u{1F30D}-\u{1F567}]/gu

经过测试:\u{24C2}-\x{1F251} 这里要改为\u{1F170}-\u{1F251}

最后得到的JS正则是:

/[\u{1F601}-\u{1F64F}\u{2702}-\u{27B0}\u{1F680}-\u{1F6C0}\u{1F170}-\u{1F251}\u{1F600}-\u{1F636}\u{1F681}-\u{1F6C5}\u{1F30D}-\u{1F567}]/gu

可以使用在线正则表达式验证一下 js emoji 工具

php emoji符号匹配 let $list = document.querySelectorAll('.category') let arr = [],regText = '',result; for(let key in $list){ let text = $list[key].innerText?$list[key].innerText.replace(/(Back to top)|(\n?)/ig,'') :''; result = text.match(/\(\s+([0-9a-fA-F]+)\s+-\s+([a-fA-F0-9]+)\s+\)/) if(result && result.length == 3){ regText += `\\x{${result[1]}}-\\x{${result[2]}}|` } arr.push(text) } console.log('php 正则表达式') console.log('/['+regText+']/u' );///[\x{1F601}-\x{1F64F}\x{2702}-\x{27B0}\x{1F680}-\x{1F6C0}\x{24C2}-\x{1F251}\x{1F600}-\x{1F636}\x{1F681}-\x{1F6C5}\x{1F30D}-\x{1F567}]/u

经过测试:\x{1F170}-\x{1F251} 这里要改为 所以一般emoji匹配的正则是:

/[\x{1F601}-\x{1F64F}\x{2702}-\x{27B0}\x{1F680}-\x{1F6C0}\x{1F170}-\x{1F251}\x{1F600}-\x{1F636}\x{1F681}-\x{1F6C5}\x{1F30D}-\x{1F567}]/u php 过滤emoji字符方法: function removeEmoji($nickname) { $clean_text = ""; $regexEmoticons = '/[\x{1F601}-\x{1F64F}\x{2702}-\x{27B0}\x{1F680}-\x{1F6C0}\x{24C2}-\x{1F251}\x{1F600}-\x{1F636}\x{1F681}-\x{1F6C5}\x{1F30D}-\x{1F567}]/u'; $clean_text = preg_replace($regexEmoticons, '', $text); return $clean_text; } echo removeEmoji('你好😊')

这篇文章里写的一个PHP处理微信昵称emoji方法

function filterEmoji($str) { $str = preg_replace_callback( '/./u', function (array $match) { return strlen($match[0]) >= 4 ? '' : $match[0]; }, $str); return $str; }

php 在线编辑器

总结

已上方法得出的emoji unicode 的范围,只符号大多数常见的符号,并还是不全面。可以看一下这个php emoji 库

参考 Emoji 的处理 - 使用正则表达式匹配所有 EmojiPHP处理微信昵称emoji方法Emoji的编码以及常见问题处理JS Emoji 过滤


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3