如何在JavaScript中检测和删除无效的unicode序列

时间:2012-06-07 16:58:54

标签: javascript node.js unicode

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

有没有比实现状态机char-by-char或非本机node.JS模块更好的方法?

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

1 个答案:

答案 0 :(得分:2)

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

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

如果您将XRegExp库与Unicode addons一起使用,则可以使用\p{Cs}\p{Surrogate} Unicode类别而不是[\ud800-\udfff]。使用XRegExp还可以轻松访问其他可能相关的Unicode属性,例如\p{Noncharacter_Code_Point}\p{Co}\p{Private_Use}\p{Cn}\p{Unassigned}

由于你正在使用Node.js,你可以使用npm install xregexp通过npm install XRegExp。 XRegExp的npm模块自动包含Unicode插件。