3

给定一个输入字符串,生成一个输出字符串,其中所有无效序列都被删除或替换为 U+FFFD。

有没有比逐个字符地实现状态机或可用的非本机 node.JS 模块更好的方法?

例如,无效序列是孤立的代理"\uD800",或其他无效的多字符序列。

4

1 回答 1

2

匹配无效序列所需的正则表达式取决于您要包含的内容。要使用 U+FFFD 替换孤立代理,您可以使用如下内容:

var surrogates = /[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;
str = str.replace(surrogates , function ($0) {
    return $0.length > 1 ? $0 : '\ufffd';
});

如果您使用带有Unicode 插件的XRegExp库,您可以使用或Unicode 类别而不是. 使用 XRegExp 还可以让您轻松访问其他可能相关的 Unicode 属性,例如, or , and or 。\p{Cs}\p{Surrogate}[\ud800-\udfff]\p{Noncharacter_Code_Point}\p{Co}\p{Private_Use}\p{Cn}\p{Unassigned}

由于您使用的是 Node.js,因此您可以通过npm使用npm install xregexp. XRegExp 的 npm 模块自动包含 Unicode 插件。

于 2012-06-07T18:47:52.430 回答