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

时间:2014-04-28 06:22:11

标签: javascript jquery

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

有人知道,如何实现这个目标?

1 个答案:

答案 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()));
});