如何更改keyup上的字符输入。如果我输入“Ø”或类似“O”的其他字符,我想自动用字符“O”替换它。对于其他非英语字符也是如此。
有人知道,如何实现这个目标?
答案 0 :(得分:4)
这可能是基于关于主题http://semplicewebsites.com/removing-accents-javascript
的这篇文章的起点从网站复制的要点:
首先是要替换的字符的地图(文章来源包含广泛的映射数组)
var latin_map = {
'Ø': 'O', // 'empty set' (?)
'Á': 'A', // LATIN CAPITAL LETTER A WITH ACUTE
'Ă': 'A', // LATIN CAPITAL LETTER A WITH BREVE
...
'ᵥ': 'v', // LATIN SUBSCRIPT SMALL LETTER V
'ₓ': 'x', // LATIN SUBSCRIPT SMALL LETTER X
};
然后,文章使用原型操作将latinise
添加为所有字符串的函数
String.prototype.latinise = function() {
return this.replace(/[^A-Za-z0-9]/g, function(x) { return latin_map[x] || x; })
};
// American English spelling :)
String.prototype.latinize = String.prototype.latinise;
String.prototype.isLatin = function() {
return this == this.latinise();
};
使用原型操作
> console.log("Mere Øl".latinise())
"Mere Ol"
如何适用于您的情况:
我个人会将函数与字符串原型分开(但这是个人选择)。
latin_map = {...};
function latinize(s) {
return s.replace(/[^A-Za-z0-9]/g, function(x) { return latin_map[x] || x;});
}
然后你可以像这样清理keyup上的输入(假设你使用jQuery):
$('#myinput').on('keyup', function() {
$this = $(this);
$this.val(latinize($this.val()));
});