1

我正在使用 WebSocket 为 JavaScript 游戏实现聊天功能。我想用其他字母替换用户在输入文本字段中写入的非 ascii 字符。Ä 替换为 a,Ö 替换为 o。并且所有其他非ASCII字符都应替换为“”。

var message = document.getElementById("write_message").value;
message = message.replace(/ä/g, "a").replace(/ö/g, "o");
message = message.replace(/^[\000-\177]/g, "");
ws.send("M" + message);

我尝试了上述代码的更简单版本,但不知何故,所有用户输入似乎都被替换了。甚至是ASCII字符。我从另一个 Stackoverflow 问题中找到了正则表达式。

4

2 回答 2

4

您必须知道支持的 html 页面的字符集。根据它是 unicode 还是某些 8 位字符,使用\uzzzz\xzz匹配z表示十六进制数字的字符。

示例:message = message.replace(/^[\u0080-\uffff]/g, "");ascii-fies unicode 文本。

于 2013-04-17T14:23:20.280 回答
0

您的代码是正确的,除了抑扬符^必须出现在左括号[之后以表示否定。否则,它意味着完全不同的东西。

但是,我认为您实际上想将大写的 Ä 和 Ö 映射到 A 和 O 而不是删除它们。为此,您将使用

message = message.replace(/ä/g, "a")
                 .replace(/ö/g, "o")
                 .replace(/Ä/g, "A")
                 .replace(/Ö/g, "O")
                 .replace(/[^\000-\177]/g, "");
于 2013-04-17T18:03:49.097 回答