用重音符号替换重音字符

时间:2018-08-30 14:28:29

标签: javascript

我有一个不允许重音的文本字段。我正在使用此代码:

<input type="text" onkeyup="value=value.replace(/[^0-9a-zA-Z' ']/g,'')">

而不是阻止字符,我需要替换它们,例如通过键入Çchange to C

我找到了一个函数并且可以正常工作,但是当我键入一个点时,会出现字母A

你能帮我吗?

<script>function retiraAcento(palavra,obj){  
com_acento = 'áàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÖÔÚÙÛÜÇ<,>´`-,*/~';  
sem_acento = 'aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC          ';  
nova='';  

for(i=0;i<palavra.length;i++) {
if (com_acento.search(palavra.substr(i,1))>=0) {  
    nova+=sem_acento.substr(com_acento.search(palavra.substr(i,1)),1);  
} else {  
    nova+=palavra.substr(i,1);  
} 
}  
obj.value = nova;}</script><input type="text" onKeyUp="javascript:retiraAcento(this.value, this);">

1 个答案:

答案 0 :(得分:1)

我没有足够深入地研究为什么.被替换为A,但是此版本没有这种行为。它不能完全一样地工作,并且可以在整个字符串上运行,但是除非在大型文本字段中使用它,否则这可能不是问题,在这种情况下,可以通过其他方式对其进行优化。

const com_acento = 'áàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÖÔÚÙÛÜÇ<,>´`-,~';
const sem_acento = 'aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC          ';

function retiraAcento(string) {
    return string
    .split('')
    .map(char => {
        const charIdx = com_acento.indexOf(char)
        if (charIdx !== -1) {
        return sem_acento[charIdx]
      }
      return char
    })
    .join('')
}

function replaceCharOnChange(evt) {
  event.target.value = retiraAcento(evt.target.value)
}

document.querySelector('input').addEventListener('keyup', replaceCharOnChange)

对不起,这是用英语重写的一半!除了两个相同长度的字符串,我还将考虑使用其他数据结构。最简单的是对象查找表,例如:

{á: 'a', ç: 'c', ...}

但是您也可以通过其他方式进行操作

相关问题