删除表情符号,但不删除非英语字符

时间:2018-02-13 10:43:09

标签: javascript jquery

我试图从字符串中移除所有表情符号字符,以下代码工作正常,除了它也删除非英文字符,我该如何避免这种情况?

var ranges = [
  '[\u00A0-\u269f]',
  '[\u26A0-\u329f]',
  '[-]'
];


$('#submit').on('click', function() {
  var str = $('#text').val();
  str = str.replace(new RegExp(ranges.join('|'), 'ug'), '');
  $("#text").val(str);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="text"/>
<input type="submit" id="submit" value="clear"/>

用于测试的示例表情符号:⛔️ 非英语示例:آ

1 个答案:

答案 0 :(得分:1)

这是一个具有广泛字符范围的单一模式:

/[^ -\u2122]+ +| *[^ -\u2122]+/ug

我的方法基本上来自这个php答案:https://stackoverflow.com/a/43106144/2943403

它会在一侧删除一个或多个表情符号(但不是两个)。

&#13;
&#13;
$('#submit').on('click', function() {
  $("#after").html($('#before').val().replace(/[^ -\u2122]+ +| *[^ -\u2122]+/ug,''));
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="before" cols="75" rows="5">Sample emoji for test: ⛔️ Sample non english: آ Kilian à Dijon #4 • Vlog #2 • Primark again !?  - YouTube Funfesty   on Twitter: "Je commence à avoir mal à la tête à force Sia 2017 Cheap Thrills 2017 live </textarea><br>
<input type="submit" id="submit" value="Remove Emojis"/><br>
<textarea id="after" cols="75" rows="5"></textarea>
&#13;
&#13;
&#13;

我会为那些对我的回答有疑问/担忧的人添加更新:

这是另一种正则表达式模式声明,模式本身可以扩展为包含ascii表中较低的字符(包括换行符):

$('#submit').on('click', function() {
  var r = new RegExp(/[^\u0000-\u2122]+ +| *[^\u0000-\u2122]+/, "ug");
  $("#after").html($('#before').val().replace(r,''));
});

JSFiddle Demo