1

我有一个用普通字符替换特殊字符的 JavaScript 函数。

当我输入一个句号.时,它变为a

示例:info@example.com更改为info@exampleacom

我究竟做错了什么?

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.toUpperCase();
   obj.value = nova
}
$(document).ready(function () {
   $(":input").live('blur', function () {
       retiraAcento(this.value, this);
   });
});
4

1 回答 1

4

String.search接受正则表达式作为参数,而不是哑字符串。该字符.在正则表达式中具有特殊含义;它的意思是“匹配任何字符”。

因此,当您的代码最终执行com_acento.search(".")结果时,总是0:点匹配第一个字符。此外,正则表达式中还有其他具有特殊含义的字符也会导致您的代码无法正常工作。

indexOf通过使用而不是解决您的问题search

于 2013-03-27T21:52:52.260 回答