删除javascript中不同范围内的Unicode字符

Remove Unicode characters within various ranges in javascript

本文关键字:Unicode 字符 范围内 javascript 删除      更新时间:2023-09-26

我试图删除字符串中的每个Unicode字符,如果它落在以下任何范围内。

'uD800-'uDFFF
'u1D800-'u1DFFF
'u2D800-'u2DFFF
'u3D800-'u3DFFF
'u4D800-'u4DFFF
'u5D800-'u5DFFF
'u6D800-'u6DFFF
'u7D800-'u7DFFF
'u8D800-'u8DFFF
'u9D800-'u9DFFF
'uAD800-'uADFFF
'uBD800-'uBDFFF
'uCD800-'uCDFFF
'uDD800-'uDDFFF
'uED800-'uEDFFF
'uFD800-'uFDFFF
'u10D800-'u10DFFF

作为最初的原型,我试图通过在replace函数中使用正则表达式来删除第一个范围内的字符。

var buffer = "he'udfffllo world";
var output = buffer.replace(/['ud800-'udfff]/g, "");
d.innerText = buffer + " is replaced with " + output;

在这种情况下,字符似乎被很好地替换了。

但是,当我用

替换它时
var buffer = "he'udfffllo worl'u1dfffd";
var output = buffer.replace(/['ud800-'udfff'u1d800-'u1dfff]/g, "");
d.innerText = buffer + " is replaced with " + output;

我看到一些意想不到的东西。我的输出显示为:

> > > >

这里有两点需要注意:

  1. 'u1dfff不显示为一个字符- 'u1dff被转换为一个字符,f在最后被视为自己的字符
  2. 结果为空字符串

如果你能给我一些建议,我将不胜感激。


编辑

我的总体目标是过滤掉encodeURIComponent函数认为无效的所有字符。我运行了一些测试,发现上面的列表是无效的字符集。例如,下面的代码首先将1dfff转换为unicode字符,然后将其传递给encodeURIComponent,这会导致后一个函数引发异常。

var v = String.fromCharCode(122879);
var uriComponent = encodeURIComponent(v);

在@Blender指出我在代码中使用x而不是u来表示Unicode字符后,我编辑了部分问题。


编辑2

我进一步研究了获取"无效"unicode范围的技术,结果证明,如果您给String.fromCharacterCode一个大于16位的数字,它只会查看该数字的最低16位。这就解释了我看到的模式。结果是,我只需要考虑第一个范围

似乎您正试图从字符串中删除Unicode代理代码单元。但是,只有U+D800到U+DFFF是代理代码点;您命名的其余值不是,并且可以分配给有效的Unicode字符。在这种情况下,以下内容就足够了(使用'u而不是'x来引用Unicode字符):

buffer.replace(/['ud800-'udfff]/g, "");