如何在 keyup 事件中用简单的 az 对应项替换非英文字符

use*_*129 -4 javascript jquery

如何更改 keyup 上的字符输入。如果我输入“\xc3\x98”或其他类似于“O”的字符,我想自动将其替换为字符“O”。对于其他非英语字符也是如此。

\n\n

有人知道如何实现这一目标吗?

\n

dav*_*vur 5

这可能是一个起点,基于这篇关于主题的文章http://semplicewebsites.com/removing-accents-javascript

\n\n

从网站复制的要点:

\n\n

首先是要替换的字符的映射(文章来源包括广泛的映射数组)

\n\n
var latin_map = {\n    \'\xc3\x98\': \'O\', // \'empty set\' (?)\n    \'\xc3\x81\': \'A\', // LATIN CAPITAL LETTER A WITH ACUTE\n    \'\xc4\x82\': \'A\', // LATIN CAPITAL LETTER A WITH BREVE\n    ...\n    \'\xe1\xb5\xa5\': \'v\', // LATIN SUBSCRIPT SMALL LETTER V\n    \'\xe2\x82\x93\': \'x\', // LATIN SUBSCRIPT SMALL LETTER X\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后,本文使用原型操作将latinise所有字符串添加为函数

\n\n
String.prototype.latinise = function() {\n    return this.replace(/[^A-Za-z0-9]/g, function(x) { return latin_map[x] || x; })\n};\n\n// American English spelling :)\nString.prototype.latinize = String.prototype.latinise;\n\nString.prototype.isLatin = function() {\n    return this == this.latinise();\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n

与原型操作一起使用

\n\n
> console.log("Mere \xc3\x98l".latinise())\n"Mere Ol"    \n
Run Code Online (Sandbox Code Playgroud)\n\n

如何适用于您的情况

\n\n

就我个人而言,我会将函数与字符串原型分开(但这是个人选择)。

\n\n
latin_map = {...};\nfunction latinize(s) {\n    return s.replace(/[^A-Za-z0-9]/g, function(x) { return latin_map[x] || x;});\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后你可以像这样清理 keyup 上的输入(假设你使用 jQuery):

\n\n
$(\'#myinput\').on(\'keyup\', function() {\n   $this = $(this);\n   $this.val(latinize($this.val()));\n});\n
Run Code Online (Sandbox Code Playgroud)\n