创建一个可链接的函数,规范化一小组特殊字符

时间:2013-11-18 04:34:24

标签: javascript jquery special-characters

我想用一个可链接的函数转换一些特殊字符的出现,以便像这样工作:

>>> "Den här ån gör gott".normalizor().toUpperCase();

"DEN HAR AN GOR GOTT"

我只对转换某些字符感兴趣:

å >> a
ä >> a   
ö >> o 

任何有助于我朝着正确方向前进的帮助都将非常感激!

纯JavaScript或使用任何库无关紧要。

3 个答案:

答案 0 :(得分:1)

normalize似乎是一个更好的方法名称:

"Den här ån gör gott".normalize().toUpperCase();

String.prototype.normalize = function() {
    return this.replace(/[åä]/g, 'a')
               .replace(/[ö]/g, 'o');
}

答案 1 :(得分:0)

如果要转换这些特殊字符,可以将德语(我假设)字符的ASCII值映射到简单的英文字符。

例如,您要在此处映射

ASCII 229(å)到ASCII 97(a)

ASCII 228(ä)到ASCII 97(a)

ASCII 246(ö)到ASCII 111(o)

function normalizor(char) {
  if (char.charCodeAt()===228 || char.charCodeAt()===229) 
    return String.fromCharCode(97);
    //or simply return 'a';
} 

答案 2 :(得分:0)

谷歌给了我这个解决方案:

String.prototype.normalizor = function() {
    var s, i, l, diacritics, chars;
    s = this;
    chars = ['A', 'a', 'E', 'e', 'I', 'i', 'O', 'o', 'U', 'u', 'N', 'n', 'C', 'c'];
    diacritics = [
        /[\300-\306]/g, /[\340-\346]/g, // A, a
        /[\310-\313]/g, /[\350-\353]/g, // E, e
        /[\314-\317]/g, /[\354-\357]/g, // I, i
        /[\322-\330]/g, /[\362-\370]/g, // O, o
        /[\331-\334]/g, /[\371-\374]/g, // U, u
        /[\321]/g, /[\361]/g, // N, n
        /[\307]/g, /[\347]/g, // C, c
    ];
    for (i = 0, l = diacritics.length; i < l; i++) {
        s = s.replace(diacritics[i], chars[i]);
    }
    return s;
}

SO上的相同主题:Replacing diacritics in Javascript