用表情符号替换字符串

Replace string with emoji

提问人:Clms 提问时间:6/5/2017 最后编辑:melpomeneClms 更新时间:6/5/2017 访问量:3030

问:

给定是一个输入字段,其中包含表示表情符号的代码。 我现在想用相应的表情符号替换此代码。

这个想法是用 unicode 替换值,但这在输入中对我不起作用。只有当我将表情符号本身复制到代码中时,替换才会起作用。

例:

给定代码: , converted: ,

应为: 😎
[e-1f60e]😎

我的问题是:如何将给定的代码转换为JavaScript中的表情符号?

$("#tauschen").click(function() {
  $('#blub').val(function(index, value) {
    return value.replace('[e-1f60e]', '😎'); // Doesn't work
  });
});

$("#tauschen2").click(function() {
  $('#blub2').val(function(index, value) {
    return value.replace('[e-1f60e]', '😎'); // Works - but how to convert the given string to an emoji?!
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>
  Given are strings in an imout field like these, representing an emoji: <strong>[e-1f60e]</strong> </p>

<p>
 Now I want to display them "live" as emojis, instead of only the code: &#x1f60e;
</p>

<input id="blub" type="text" name="test" value="[e-1f60e]">
<input type="submit" value="Test 1" id="tauschen">
<br>

<input id="blub2" type="text" name="test" value="[e-1f60e]">
<input type="submit" value="Test 2" id="tauschen2">

JSFiddle:https://jsfiddle.net/r07qnuoz/1/

JavaScript的

评论

0赞 Thomas 6/5/2017
value.replace(/\[e-([0-9a-fA-F]{5})\]/g, (m,cp) => String.fromCodePoint(parseInt(cp, 16)));

答:

9赞 le_m 6/5/2017 #1

你需要...

  1. ...查找或提取字符串中的十六进制码位
  2. ...将该十六进制字符串转换为number
  3. ...通过 String.fromCodePoint 将该代码点编号转换为字符串

function convertEmoji(str) {
  return str.replace(/\[e-([0-9a-fA-F]+)\]/g, (match, hex) =>
    String.fromCodePoint(Number.parseInt(hex, 16))
  );
}

console.log(convertEmoji('[e-1f60e]')); // 😎

为了与 IE 兼容,请按照此处的详细说明使用,或者根据规范直接转换为 16 位代理项对:String.fromCharCode

// Convert supplementary plane code point to two surrogate 16-bit code units:
function surrogate(cp) {
  return [
    ((cp - 0x010000 & 0xffc00) >> 10) + 0xd800,
    (cp - 0x010000 & 0x3ff) + 0xdc00
  ];
}

function convertEmoji(str) {
  return str.replace(/\[e-([0-9a-fA-F]+)\]/g, function(match, hex) {
    return String.fromCharCode.apply(null, surrogate(Number.parseInt(hex, 16)))
  });
}

console.log(convertEmoji('[e-1f60e]')); // 😎

评论

0赞 melpomene 6/5/2017
String.fromCodePoint未在 Internet Explorer 中定义。
0赞 Clms 6/5/2017
谢谢,工作正常。但我真的不明白IE的黑客。你能为我解释一下解决方案吗?提前非常感谢!
0赞 le_m 6/5/2017
@user1658080 添加了解释代理对的维基百科示例代码和链接。String.fromCharCode
0赞 Clms 6/5/2017
@le_m - 太棒了!多谢!