Eliminando acentuações em Javascript[RESOLVIDO]

Bom dia galera!!
Tenho campos que devem ser validados com letra maiúscula e SEM ACENTUAÇÃO!
Se poderem me ajudar com relação a acentuação SERIA ÓTIMO!

Thank’s in advance!

[]'s

Cria uma expressão regular para verificar se o texto possui esses tipos de caracteres.

Isso… é justamente o que preciso!
PODE ME AJUDAR? =D

Vejam esse exemplo!!!

<html>
<head>


</head>


<script language="JavaScript" type="text/javascript">


 function retiraAcento(obj)
 {
   palavra = String.fromCharCode(event.keyCode);
  
  var caracteresInvalidos = 'àèìòùâêîôûäëïöüáéíóúãõÀÈÌÒÙÂÊÎÔÛÄËÏÖÜÁÉÍÓÚÃÕ';
  var caracteresValidos =   'aeiouaeiouaeiouaeiouaoAEIOUAEIOUAEIOUAEIOUAO';
  var acento = "´`^¨~";
  if(acento.indexOf(palavra)!= -1)
  {
    window.event.keyCode = 0;
  }
 
 if (caracteresInvalidos.indexOf(palavra) == -1) 
  {
       if (caracteresValidos.indexOf(palavra) != -1) {
         window.event.keyCode = 0;
         obj.value = obj.value + palavra;
       }
  } 
  else 
  {
           window.event.keyCode = 0;
           nova = caracteresValidos.charAt(caracteresInvalidos.indexOf(palavra));
           obj.value =  obj.value + nova;
  }
  
 }
</script>



<form id="verifica" method="post" action="" >
  <p>
    &lt;input type="text" name="txtlogin" id="txtlogin" onblur="javascript:retiraAcento(this);"&gt;
    &lt;input type="text" name="txtlogin" id="txtlogin" onKeyPress="javascript:retiraAcento(this);"&gt;
  </p>
  
&lt;/form&gt;


&lt;/html&gt;

No evento “onKeyPress” FUNCIONA BELEZINHA… já o “onBlur” não!
Se o usuário der um Crtl V com palavras com acentos ELE ACEITA!!
Não conheço NADA de javascript mas da pra notar que a estrutura da function é “meio que feita para esse evento”…

Como posso fazer para validar isso, mesmo que um Crtl V seja executado???

:roll:

Bom… agora vcs tem duas alternativas:

&lt;html&gt;
&lt;head&gt;


&lt;/head&gt;


&lt;script language="JavaScript" type="text/javascript"&gt;


 function retiraAcento(palavra,obj)
 {
com_acento = 'áàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÖÔÚÙÛÜÇ';
sem_acento = 'aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC';
nova='';
for(i=0;i&lt;palavra.length;i++) {
if (com_acento.search(palavra.substr(i,1))&gt;=0) {
nova+=sem_acento.substr(com_acento.search(palavra.substr(i,1)),1);
}
else {
nova+=palavra.substr(i,1);
}
}
	obj.value = nova.toUpperCase();
}

&lt;/script&gt;



&lt;form id="verifica" method="post" action="" &gt;
  <p>
    &lt;input type="text" name="txtlogin" id="txtlogin" onBlur="javascript:retiraAcento(this.value, this);"&gt;
    &lt;input type="text" name="txtlogin" id="txtlogin" onKeyPress="javascript:retiraAcento(this.value, this);"&gt;
  </p>
  
&lt;/form&gt;


&lt;/html&gt;

Isso era o que eu realmente precisava!

Obrigado pela FORÇA de todos :XD:

Bom, aconselho vc a fazer com RegExp, pois vc cerca e não precisa fazer isso tudo, já estou providenciando um código de exemplo para vc ver como é.
muito simples…

bom, não ficou muito bom na parte de otimização, mas é melhor do que está descrito acima, observe:


<script language="JavaScript" type="text/javascript">
window.onload = function(){
        $('string').onkeyup = function(){
            testar_string($('string'));
        }    
}
     
function $(id){
    return document.getElementById(id);
}
function testar_string(string){
    palavra = new RegExp('\^(([0-9|a-zA-Z]{0,32}))\$');
  (!palavra.test(string.value))?string.value = substStr(string,palavra):"";
  
}
function substStr(teste,regex){
    c = teste.value.length;
    str ="";    
    for(i=0; i<c ;i++){
        if(regex.test(teste.value[i]))
        str+=teste.value[i];
    }
    return str;
}
</script>
<input type='text' id='string' />

no caso, cole qualquer string que ele tira as ocorrências de elementos inválidos, visualize só.

insira qualquer caractere sequencial como áó&&,
ou cole algo : asjkldj8*%&¨ááóómais

Espero ter ajudado.

Serviu também a solução descrita por mim?

Então brother…no primeiro teste que fiz aconteceu algo mais ou menos assim dentro do input:

undefiedundefiedundefied

Sem contar que travou meu browser… e não consegui “copiar e colar” o resultado aqui pra vc ver…

O que será que ta errado???
A idéia é ótima, mas não funfou!

Testa vc, experimenta segurar a tecla “%” por alguns segundos depois solta!
Ou escreva algo “aceitável” pela function e depois digite uma tecla “inválida”, vai dar o mesmo erro!

[]'s

[quote=neeryck]Bom… agora vcs tem duas alternativas:

&lt;html&gt;
&lt;head&gt;


&lt;/head&gt;


&lt;script language="JavaScript" type="text/javascript"&gt;


 function retiraAcento(palavra,obj)
 {
com_acento = 'áàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÖÔÚÙÛÜÇ';
sem_acento = 'aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC';
nova='';
for(i=0;i&lt;palavra.length;i++) {
if (com_acento.search(palavra.substr(i,1))&gt;=0) {
nova+=sem_acento.substr(com_acento.search(palavra.substr(i,1)),1);
}
else {
nova+=palavra.substr(i,1);
}
}
	obj.value = nova.toUpperCase();
}

&lt;/script&gt;



&lt;form id="verifica" method="post" action="" &gt;
  <p>
    &lt;input type="text" name="txtlogin" id="txtlogin" onBlur="javascript:retiraAcento(this.value, this);"&gt;
    &lt;input type="text" name="txtlogin" id="txtlogin" onKeyPress="javascript:retiraAcento(this.value, this);"&gt;
  </p>
  
&lt;/form&gt;


&lt;/html&gt;

Isso era o que eu realmente precisava!

Obrigado pela FORÇA de todos :XD:[/quote]

Sinto em dizer, mas sua solução está com problemas:::::

insira o seguinte código: ADF G _ A ´[a á á ´´´´´´´
verá os problemas dela.

Brother…veja… minha necessidade agora aqui na empresa é apenas acentuação!!! NÃO PRECISO EXCLUIR @#$%… e etc!
Se vc olhar para o código vai notar que se adicionar ´`^~ nos caracteres com_acento e na outra substituir por espaço isso será eliminado tb.
ISSO EU JÁ SABIA!! :smiley:

Algo mais que eu não tenha percebido no meu código?

Continuando… a dúvida parou no seu código!

CONSEGUIU RESOLVER PARA A GALERA DO GUJ VER???

[]'s

[quote=neeryck][quote=xjunior ]
Sinto em dizer, mas sua solução está com problemas:::::

insira o seguinte código: ADF G _ A ´[a á á ´´´´´´´
verá os problemas dela.
[/quote]

Brother…veja… minha necessidade agora aqui na empresa é apenas acentuação!!! NÃO PRECISO EXCLUIR @#$%… e etc!
Se vc olhar para o código vai notar que se adicionar ´`^~ nos caracteres com_acento e na outra substituir por espaço isso será eliminado tb.
ISSO EU JÁ SABIA!! :smiley:

Algo mais que eu não tenha percebido no meu código?

Continuando… a dúvida parou no seu código!

CONSEGUIU RESOLVER PARA A GALERA DO GUJ VER???

[]'s[/quote]

Bom mano, é o seguinte, como não uso IE, não vi que tinha erro pro Internet Explorer (bosta do Ruwindows), aqui, bom, o objetivo não era fazer um igual e nem mesmo fazer o mesmo que vc, e sim te dar uma idéia sobre o assunto, visualizando o erro descrito e desde já agradeço pois pensei na logica em pouco tempo e não testei no IE, vou melhorar o código para esse trem do IE, mas testa no firefox ou chrome que vai visualizar o que o mesmo faz.

Bom, agradeço pelo feedBack, vou melhorar agora e resolver este problema, pois a solução é simples.
flw mano…
(caracteres especiais vc mesmo coloca a excessão pra eles, vou melhorar e colocar algumas excessões, ok)

E o ponto que coloquei é que se vc inserir algum caracter tipo { ou ´[ assim, ele para a verificação e deixa passar acentos como á ó entendeu?
num to criticando seu código não, só mostrando alguns erros (ao meu ver - as vezes é o q vc quer) que podem ser corrigidos.

:shock:
kkkkkkkkkkkkkkkkkkkkk

Calmaaa, calmaaaa, amigooo, amigoooo!

:hunf:

BOM… Deu p galera aí do GUJ ter algo em mãos… espero que tenha sido útil (com algumas excessões =D)! Encerro por aqui!

:thumbup:

Bom, fiz agora pra rodar em qualquer navegador, mastigadinho, e acrescido de algumas verificações de exceções extras de caracteres especiais.

[code]

[/code]

Bom mano, espero ter ajudado, qualquer dúvida ou reportar bugs, só dizer…
e não apelei, só respondi

Ficou certinho agora???
Deu certo??

Mais um, convertendo para maiúsculo:

[code]

[/code]

flw galera, até mais

E aí pessoal,

Sei que a dúvida tah marcada como resolvida, mas pra qm tah tendo dificuldades pra entender os códigos acima, envio esta função, pois acredito que este seja um código mais simples e auto-explicativo:

[code]function retiraAcento(palavra){
var com_acento = ‘áàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÖÔÚÙÛÜÇ´`^¨~’;
var sem_acento = 'aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC ';

for (l in palavra){
    for (l2 in com_acento){
        if (palavra[l] == com_acento[l2]){
            palavra=palavra.replace(palavra[l],sem_acento[l2]);
		}
    }
}
return palavra;

}[/code]

aí é só adequar a chamada da função a sua aplicação…

Abraço

1 curtida

E aí pessoal,

Sei que a dúvida tah marcada como resolvida, mas pra qm tah tendo dificuldades pra entender os códigos acima, envio esta função, pois acredito que este seja um código mais simples e auto-explicativo:


    function retiraAcento(palavra){  
        var com_acento = 'áàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÖÔÚÙÛÜÇ´`^¨~';    
        var sem_acento = 'aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC     ';  
                                                                      
        for (l in palavra){  
            for (l2 in com_acento){  
                if (palavra[l] == com_acento[l2]){  
                    palavra=palavra.replace(palavra[l],sem_acento[l2]);  
                }  
            }  
        }  
        return palavra;  
      
    }  

aí é só adequar a chamada da função a sua aplicação…

Abraço