用重音更改字符

时间:2017-03-08 20:43:32

标签: javascript jquery

我尝试用没有重音的字符替换带重音的字符,但它不起作用。有人有想法吗?谢谢

function epurer_code(texte) {
    var pattern_accent = new Array("é", "è", "ê", "ë", "ç", "à", "â", "ä", "î", "ï", "ù", "û", "ü", "ô", "ó", "ö");
    var pattern_replace_accent = new Array("e", "e", "e", "e", "c", "a", "a", "a", "i", "i", "u", "u", "u", "o", "o", "o");
    texte.value = texte.value.preg_replace(pattern_accent, pattern_replace_accent, texte.value);
}

<TEXTAREA style="color:black;" name="Body" id="Body" value="" rows="6" cols="60" maxlength="160" onkeyup="supaccent(this);"></TEXTAREA>

2 个答案:

答案 0 :(得分:3)

这是一种解决方法。每textarea次事件都会动态替换keyup个内容。

var elem = document.getElementById('Body');

function clean() {
  var mapObj = {
    "é": 'e',
    "ó": 'o',
    "ç": 'c',
    "è": 'e',
    "ê": 'e',
    "ç": 'c'
    //and so on...      
  }
  elem.value = elem.value.replace(/[éèêëçàâäîïùûüôóö]/g, match => mapObj[match]);
}
<TEXTAREA style="color:black;" name="Body" id="Body" value="" rows="6" cols="60" maxlength="160" onkeyup="clean()"></TEXTAREA>

答案 1 :(得分:1)

刚刚修改了你的代码。使用pattern_accent数组形成正则表达式pattern_exp。在替换模式匹配方法中,我在pattern_accent数组中获得匹配重音的位置,并在pattern_replace_accent数组中的相同位置返回重音。

function supaccent(texte) {
    var pattern_accent = new Array("é", "è", "ê", "ë", "ç", "à", "â", "ä", "î", "ï", "ù", "û", "ü", "ô", "ó", "ö");
    var pattern_replace_accent = new Array("e", "e", "e", "e", "c", "a", "a", "a", "i", "i", "u", "u", "u", "o", "o", "o");

    var pattern_exp = new RegExp('['+pattern_accent.join()+']', 'g')

    texte.value = texte.value.replace(pattern_exp, function(match){
        var index = pattern_accent.indexOf(match);
        return index>=0?pattern_replace_accent[index]:match;
    });
}
<TEXTAREA style="color:black;" name="Body" id="Body" value="" rows="6" cols="60" maxlength="160" onkeyup="supaccent(this);"></TEXTAREA>