man*_*j82 26 javascript unicode emoji
如何使用JavaScript删除表情符号代码?我以为我使用下面的代码照顾它,但我仍然有像这样的字符.
function removeInvalidChars() {
return this.replace(/[\uE000-\uF8FF]/g, '');
}
Run Code Online (Sandbox Code Playgroud)
bob*_*nce 50
您选择的范围是私人使用区域,包含非标准字符.用于将表情符号编码为此范围内的不同,不一致值的载体.
最近,表情符号已被赋予标准化的"统一"代码点.其中许多都在基本多语言平面之外,在块U + 1F300-U + 1F5FF中,包括你的例子U + 1F534大红圈.
您可以[\U0001F300-\U0001F5FF]在支持非BMP字符的正则表达式引擎中检测这些字符,但JavaScript RegExp不是这样的野兽.不幸的是,JS字符串模型基于UTF-16代码单元,因此您必须在正则表达式中使用UTF-16代理:
return this.replace(/([\uE000-\uF8FF]|\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDDFF])/g, '')
Run Code Online (Sandbox Code Playgroud)
但请注意,基本多语种平面中还有其他字符被电话用作表情符号,但很久以前就是表情符号.例如,U + 2665是传统的Heart Suit角色♥,但它在某些设备上被渲染为表情符号图形.您是否将其视为表情符号并尝试将其删除,由您决定.有关更多示例,请参阅此列表.
jon*_*y89 37
对我来说,没有一个答案完全删除了所有表情符号所以我必须自己做一些工作,这就是我得到的:
text.replace(/([\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g, '');
Run Code Online (Sandbox Code Playgroud)
此外,它应该考虑到如果稍后将字符串插入数据库,替换为空字符串可能会暴露安全问题.而是替换为替换字符U + FFFD,请参阅:http://www.unicode.org/reports/tr36/#Deletion_of_Noncharacters
编辑2017:我已经改变了正则表达式以包含一些新的Emojis ..
编辑2018:一些新的表情符号
hab*_*abr 18
我通过使用带有Unicode 属性转义的正则表达式解决了这个问题。我从这篇文章中得到它,它适用于 Java,但仍然非常有用 - Remove Emojis from a Java String。
'Smile'.replace(/[^\p{L}\p{N}\p{P}\p{Z}^$\n]/gu, '');
Run Code Online (Sandbox Code Playgroud)
它删除所有符号,除了:
这个应该更正确并且它有效,但对我来说它在字符串中留下了一些垃圾符号:
'Smile'.replace(/\p{Emoji}/gu, '');
Run Code Online (Sandbox Code Playgroud)
编辑:从评论中添加符号
gra*_*bus 15
只是对@hababr 答案的补充。
\n如果您需要摆脱复杂的表情符号,您还必须删除其他内容,例如修饰符等:
\n'\xe2\x80\x8d'.replace(/[\\p{Emoji}\\p{Emoji_Modifier}\\p{Emoji_Component}\\p{Emoji_Modifier_Base}\\p{Emoji_Presentation}]/gu, '').charCodeAt(0)\nRun Code Online (Sandbox Code Playgroud)\n更新:
\n*#0-9- 根据 Unicode 标准,默认情况下是具有文本表示形式的表情符号字符。
所以,我当前的解决方案是:
\n'\xe2\x80\x8d'.replace(/(?![*#0-9]+)[\\p{Emoji}\\p{Emoji_Modifier}\\p{Emoji_Component}\\p{Emoji_Modifier_Base}\\p{Emoji_Presentation}]/gu, '').charCodeAt(0)\nRun Code Online (Sandbox Code Playgroud)\n
小智 11
我找到了很多建议,但解决了我的问题的正则表达式是:
/(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|\ud83c[\ude32-\ude3a]|\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])/g
Run Code Online (Sandbox Code Playgroud)
一个简短的例子
function removeEmojis (string) {
var regex = /(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|\ud83c[\ude32-\ude3a]|\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])/g;
return string.replace(regex, '');
}
Run Code Online (Sandbox Code Playgroud)
希望它可以帮到你
@ bobince的解决方案对我不起作用.要么Emojis留在那里,要么他们被不同的表情符号交换.
这个解决方案对我有用:
var ranges = [
'\ud83c[\udf00-\udfff]', // U+1F300 to U+1F3FF
'\ud83d[\udc00-\ude4f]', // U+1F400 to U+1F64F
'\ud83d[\ude80-\udeff]' // U+1F680 to U+1F6FF
];
$('#mybtn').on('click', function() {
removeInvalidChars();
})
function removeInvalidChars() {
var str = $('#myinput').val();
str = str.replace(new RegExp(ranges.join('|'), 'g'), '');
$("#myinput").val(str);
}Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="myinput"/>
<input type="submit" id="mybtn" value="clear"/>Run Code Online (Sandbox Code Playgroud)
小智 6
在搜索并尝试了很多 unicode 正则表达式之后,我建议你尝试一下这个,它可以覆盖所有表情符号:
\nfunction removeEmoji(str) {\n let strCopy = str;\n const emojiKeycapRegex = /[\\u0023-\\u0039]\\ufe0f?\\u20e3/g;\n const emojiRegex = /\\p{Extended_Pictographic}/gu;\n const emojiComponentRegex = /\\p{Emoji_Component}/gu;\n if (emojiKeycapRegex.test(strCopy)) {\n strCopy = strCopy.replace(emojiKeycapRegex, \'\');\n }\n if (emojiRegex.test(strCopy)) {\n strCopy = strCopy.replace(emojiRegex, \'\');\n }\n if (emojiComponentRegex.test(strCopy)) {\n // eslint-disable-next-line no-restricted-syntax\n for (const emoji of (strCopy.match(emojiComponentRegex) || [])) {\n if (/[\\d|*|#]/.test(emoji)) {\n continue;\n }\n strCopy = strCopy.replace(emoji, \'\');\n }\n }\n\n return strCopy;\n}\nlet a = "1\xef\xb8\x8f\xe2\x83\xa3aa\xe2\x80\x8d\xe2\x99\x82\xef\xb8\x8fb#\xef\xb8\x8f\xe2\x83\xa3\xe2\x9c\x85\xe2\x9d\x8e23#!^*bb\xe2\x80\x8d\xe2\x99\x80\xef\xb8\x8fccc";\nconsole.log(removeEmoji(a))Run Code Online (Sandbox Code Playgroud)\r\n我知道这篇文章有点旧,但我在工作中偶然发现了这个问题,一位同事提出了一个有趣的想法。基本上,而不是剥离表情符号字符只允许有效字符。咨询这个 ASCII 表:
像这样的函数只能保留合法字符(范围本身取决于您所追求的内容)
function (input) {
var result = '';
if (input.length == 0)
return input;
for (var indexOfInput = 0, lengthOfInput = input.length; indexOfInput < lengthOfInput; indexOfInput++) {
var charAtSpecificIndex = input[indexOfInput].charCodeAt(0);
if ((32 <= charAtSpecificIndex) && (charAtSpecificIndex <= 126)) {
result += input[indexOfInput];
}
}
return result;
};
Run Code Online (Sandbox Code Playgroud)
在您希望保留英文字母 + 数字 + 特殊字符的情况下,这应该保留字母表的所有数字、字母和特殊字符。希望它可以帮助某人:)
| 归档时间: |
|
| 查看次数: |
39248 次 |
| 最近记录: |