Foros del Web » Programando para Internet » Javascript »

sustituir todas las letras acentuadas

Estas en el tema de sustituir todas las letras acentuadas en el foro de Javascript en Foros del Web. Hola pues bien,ya busque y rebusque en las faqs, y seguro q debe de estar por que no debo ser el unico, pero no lo ...
  #1 (permalink)  
Antiguo 25/08/2006, 12:53
Avatar de pato_volador  
Fecha de Ingreso: octubre-2005
Ubicación: Planeta tierra
Mensajes: 254
Antigüedad: 19 años, 1 mes
Puntos: 0
sustituir todas las letras acentuadas

Hola pues bien,ya busque y rebusque en las faqs, y seguro q debe de estar por que no debo ser el unico, pero no lo encuentro...

El problema es que tengo una cadena de texto

"Hola soy pato viendo televisión"

necesito camabiar todas las letras acentuadas por su correpondiente:

ó - o
á - a

ademas de aquellas que tengan ¨ "pingüino" -- "pinguino" o bien las "Ñ" - "N"

he intentado usar la funcion REPLACE, lo que tengo es esto:
Código HTML:
function fu(cadena)
{
var texto = cadena;
var textosalida = texto.replace(/(á|é|í|ó|ú|ñ|ä|ë|ï|ö|ü)/gi,'');
alert (textosalida);
}
y con eso si, encuentro todas las letras que quiero cambiar, de manera global e indistintamente de mayusculas o minusculas, pero hasta donde he visto REPLACE solo cambia cualquiera de esos caracteres por UNO SOLO... buaaaaa..... alguien sabe como hacer lo q ya explique..? saludos!!
__________________
De todas las cosas que queria ser... :-D acabe siendo un pato volador... :risa:
http://patovolador.wordpress.com
  #2 (permalink)  
Antiguo 25/08/2006, 14:28
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 20 años, 3 meses
Puntos: 5
Hola pato_volador.

He construido un método para String, mediante prototype.
Básicamente hay que pasarle una función como segundo argumento a replace.

Código:
<script language="JavaScript" type="text/javascript">
<!--
String.prototype.replaceLatinChar = function(){
 return output = this.replace(/á|é|í|ó|ú|ñ|ä|ë|ï|ö|ü/ig,function (str,offset,s) {
        var str =str=="á"?"a":str=="é"?"e":str=="í"?"i":str=="ó"?"o":str=="ú"?"u":str=="ñ"?"n":str;
		   str =str=="Á"?"A":str=="É"?"E":str=="Í"?"I":str=="Ó"?"O":str=="Ú"?"U":str=="Ñ"?"N":str;
		   str =str=="Á"?"A":str=="É"?"E":str=="Í"?"I":str=="Ó"?"O":str=="Ú"?"U":str=="Ñ"?"N":str;
		   str =str=="ä"?"a":str=="ë"?"e":str=="ï"?"i":str=="ö"?"o":str=="ü"?"u":str;
		   str =str=="Ä"?"A":str=="Ë"?"E":str=="Ï"?"I":str=="Ö"?"O":str=="Ü"?"U":str;
        return (str);
        })
	
}


var str = "Hola soy pingüino viendo televisión.\n" +
				"á|é|í|ó|ú|ñ|ä|ë|ï|ö|ü|"+
				"Á|É|Í|Ó|Ú|Ñ|Ä|Ë|Ï|Ö|Ü ";

document.write(str + "<br>");
document.write(str.replaceLatinChar());

//-->
</script>
Espero que te sea útil.

Un saludo
  #3 (permalink)  
Antiguo 25/08/2006, 15:41
Avatar de pato_volador  
Fecha de Ingreso: octubre-2005
Ubicación: Planeta tierra
Mensajes: 254
Antigüedad: 19 años, 1 mes
Puntos: 0
Oras!!! me acabo de qdar con el ojo cuadrado..... de por si soy medio torpe para javascript y con esto.. pues me han surgido mas dudas... que es prototype???

Bueno, y pensar que yo lo estaba haciendo asi, se que es una tonteria... pero no no doy para mas... yo pensaba que existia algo asi como en php el str_replace($array,$array) que me funcionaria perfecto, pero obvio, lo necesito del lado del cliente.... por el momento lo tengo asi... no se si sea exista algo más óptimo...

Sobre tu codigo Kepawe... ya lo probe, y si funciona, aunque no le entiendo muy bien aun... sinceramente no me gusta usar codigos que no entiendo por aquello de que despues tenga q modificarlo... pero ya me diste ideas que puedo explotar... muchas gracias!

Código:
<script language="javascript" type="text/javascript">
function rl(cadena,caja)
{
	cadena=cadena.replace('Á','A');
	cadena=cadena.replace('É','E');
	cadena=cadena.replace('Í','I');
	cadena=cadena.replace('Ó','O');
	cadena=cadena.replace('Ú','U');
	cadena=cadena.replace('Ñ','N');
	cadena=cadena.replace('Ä','A');
	cadena=cadena.replace('Ë','E');
	cadena=cadena.replace('Ï','I');
	cadena=cadena.replace('Ö','O');
	cadena=cadena.replace('Ü','U');	
	document.getElementById(caja).value=cadena;
}
</script>
__________________
De todas las cosas que queria ser... :-D acabe siendo un pato volador... :risa:
http://patovolador.wordpress.com
  #4 (permalink)  
Antiguo 25/08/2006, 16:16
Avatar de Cap.Buscapina  
Fecha de Ingreso: octubre-2004
Ubicación: Argentina
Mensajes: 836
Antigüedad: 20 años, 1 mes
Puntos: 4
aquí otro forma para hacer lo mismo:

Cita:
<html>
<head>
<script>
function quitaacentos(t){
á="a";é="e";í="i";ó="o";ú="u";ñ="n";ä="a";ë="e";ï= "i";ö="o";ü="u";
acentos=/[áéíóúñäëïöü]/g;
return t.replace(acentos,
function($1){
return eval($1)
}
)
}
</script>
</head>
<body>
<form>
<textarea cols="30" rows="5" name="texto">
probando eliminar acentos tales como á é í ó ú áéíóú</textarea>
<input type="button" onClick="texto.value=quitaacentos(texto.value)" value="Eliminar acentos"></form>
</body>
</html>
si son mas los caracteres a reemplazar solo hay que agregarlos a la ER y hacer lo propio con la variable.

saludos
__________________
by Capitán Buscapina
.
  #5 (permalink)  
Antiguo 30/08/2006, 10:32
Avatar de pato_volador  
Fecha de Ingreso: octubre-2005
Ubicación: Planeta tierra
Mensajes: 254
Antigüedad: 19 años, 1 mes
Puntos: 0
Pues ya esta... despues de tanto buscar y buscar, pensar y pensar, y mucho cafe despues lo logré.... les agradesco su ayuda.

El problema era el siguiente:

Tengo una caja de texto, y solo debo permitir letras, numeros, punto y diagonal. Todo lo demas esta prohibido... se que con un simple "onKeyPress" se puede hacer, evaluando el codigo ASCII de la tecla presionada y si esta dentro del rango de letras y numeros o es el punto o la diagonal se permite, si no se borra, pero no me sirve usarlo asi pues mis usuarios son gente medio desesperada que si ven que no se escribe X caracter mandan todo a la porra, asi que el "sistemita" debe permitir que escribas todo lo que quieras y cuando te cambies de caja debe cambiar todas las letras acentuadas por su correspondiente si acento, y quitar todos los caracteres no permitidos, ha, y de paso cambiar todo a mayusculas para hacerle notar al usuario que el sistema esta corrigiendo lo que escribio.

Asi que... lo hice de la siguiente manera, lo pogno aqui por 2 motivos, uno por si a alguien le sirve, y dos por si alguien sabe una manera más optima de hacerlo, pues soy muy novato en javascript y quiero aprender mas.

Saludos a todos de este pato!!!

Código:
<script language="javascript" type="text/javascript">

function v28(texto, caja) //mi intento numero 28 jojojo.... 
{
texto=texto.replace(/(À|Á|Â|Ã|Ä|Å|Æ)/gi,'A'); // cambio las "A"s exoticas por "A"s sencillas mediante expresiones regulares
texto=texto.replace(/(È|É|Ê|Ë)/gi,'E'); //lo mismo con las "E" y resto de vocales y la "Ñ"
texto=texto.replace(/(Ì|Í|Î|Ï)/gi,'I');
texto=texto.replace(/(Ò|Ó|Ô|Ö)/gi,'O');
texto=texto.replace(/(Ù|Ú|Û|Ü)/gi,'U');
texto=texto.replace(/(Ñ)/gi,'N'); 
document.getElementById(caja).value = texto; //envio mi cadena cambiada a la caja...
longitud = texto.length; //tomo la longitud de la cadena contenida en la caja
patolin = new Array(); //creo un array llamado "patolin"
for (i=0; i<longitud; i++) //inicio un FOR que tenga como limite la longitud de mi cadena
	{
	patolin[i]=texto.charAt(i); //guardo cada caracter en una posicion del array
	 codigo_tecla=texto.charCodeAt(i); //obtengo el ASCII DECIMAL de el caracter...
	 if ((codigo_tecla < 48 || codigo_tecla > 57) && (codigo_tecla < 65 || codigo_tecla > 90) && (codigo_tecla < 96 ||  codigo_tecla > 122) && (codigo_tecla != 13) && (codigo_tecla != 44)&& (codigo_tecla != 45) && (codigo_tecla != 46) && (codigo_tecla != 47) && (codigo_tecla != 8)  && (codigo_tecla != 16) && (codigo_tecla != 32)) //Si el codigo ASCII DECIMAL esta fuera de este rango...
	 	{
		patolin[i]=''; //cambiamos ese caracter por un nulo...
		} 
		
	}
var textof=''; //declaro una cariable textof (texto final)
for (i=0;i<longitud;i++) //con otro FOR construyo la nueva cadena
{
textof=textof+patolin[i]; 
}
document.getElementById(caja).value=textof; //envio la cadena final a la caja...
}
// y listo!!!!
</script>
En el formulario tengo la caja asi:

Código HTML:
<form id="form1" name="form1" method="post" action="">
  <p>
    <input name="nombre" type="text" id="nombre" onblur="this.value=this.value.toUpperCase(); v28(this.value, this.name);"/>
  </p>
</form> 

Espero comentarios al respecto... y de nuevo gracias a todos...
__________________
De todas las cosas que queria ser... :-D acabe siendo un pato volador... :risa:
http://patovolador.wordpress.com

Última edición por pato_volador; 30/08/2006 a las 16:55 Razón: Me falto codigo... pato tonto...
  #6 (permalink)  
Antiguo 30/08/2006, 16:01
Avatar de Cap.Buscapina  
Fecha de Ingreso: octubre-2004
Ubicación: Argentina
Mensajes: 836
Antigüedad: 20 años, 1 mes
Puntos: 4
holas, no me puse a analizar completamente todo el codigo pero me parece que para la última parte (donde unes el array) sería mas fácil utilizar JOIN.

en lugar de hacer esto
Cita:
for (i=0;i<longitud;i++) //con otro FOR construyo la nueva cadena
{
textof=textof+patolin[i];
}
podrías hacer esto
Cita:
textof=patolin.join("");
o tambien utilizar toString().

Espero que te sirva para este codigo, y si no, para algun otro seguramente.

saludos
__________________
by Capitán Buscapina
.

Última edición por Cap.Buscapina; 30/08/2006 a las 16:14
  #7 (permalink)  
Antiguo 30/08/2006, 17:01
Avatar de pato_volador  
Fecha de Ingreso: octubre-2005
Ubicación: Planeta tierra
Mensajes: 254
Antigüedad: 19 años, 1 mes
Puntos: 0
Oras! tienes razon, lo cambie como me dices y funciona igual, e incluso sirve un poco mas por que da la pauta a poner el caracter que yo quiera entre los elementos del array, muchas gracias!
__________________
De todas las cosas que queria ser... :-D acabe siendo un pato volador... :risa:
http://patovolador.wordpress.com
  #8 (permalink)  
Antiguo 31/08/2006, 03:26
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 23 años, 3 meses
Puntos: 381
Hola a todos

Lo que yo haría para la parte de los caracteres que no fueran los que mencionabas (letras, numeros, punto y diagonal) es seguir usando las RegExp y verificar caracter a caracter si se ajusta al patrón definido en la regexp. En caso afirmativo se guarda el caracter en otra variable concatenando los caracteres válidos.

algo como esto

Código:
	pat = /\w|\s|\//
	texto2 = '';
	for(m=0; m<texto.length; m++){
		if(pat.test(texto.charAt(m))) texto2 += texto.charAt(m)
	}
	alert(texto2)
La función completa podría verse así

Código:
function v28(texto, caja){
	texto=texto.replace(/(À|Á|Â|Ã|Ä|Å|Æ)/gi,'A'); // cambio las "A"s exoticas por "A"s sencillas mediante expresiones regulares
	texto=texto.replace(/(È|É|Ê|Ë)/gi,'E'); //lo mismo con las "E" y resto de vocales y la "Ñ"
	texto=texto.replace(/(Ì|Í|Î|Ï)/gi,'I');
	texto=texto.replace(/(Ò|Ó|Ô|Ö)/gi,'O');
	texto=texto.replace(/(Ù|Ú|Û|Ü)/gi,'U');
	texto=texto.replace(/(Ñ)/gi,'N'); 
	document.getElementById(caja).value = texto; //envio mi cadena cambiada a la caja...
	pat = /\w|\s|\//
	texto2 = '';
	for(m=0; m<texto.length; m++){
		if(pat.test(texto.charAt(m))) texto2 += texto.charAt(m)
	}
	alert(texto2)
}
Código:
<form id="form1" name="form1" method="post" action="">
  <p>
    <input name="nombre" size="50" value="pingüino molón ünico, en: 1º españa & / (¿mexico?)" type="text" id="nombre" onblur="this.value=this.value.toUpperCase(); pepe(this.value, this.name);"/>
  </p>
</form>
Un saludo
  #9 (permalink)  
Antiguo 07/09/2006, 17:01
Avatar de pato_volador  
Fecha de Ingreso: octubre-2005
Ubicación: Planeta tierra
Mensajes: 254
Antigüedad: 19 años, 1 mes
Puntos: 0
Muchas gracias por la idea Tunait, como siempre una ayuda tremenda... ya ando checando mas informacion sobre las expresiones regulares...

Saludos

:D
__________________
De todas las cosas que queria ser... :-D acabe siendo un pato volador... :risa:
http://patovolador.wordpress.com
  #10 (permalink)  
Antiguo 25/01/2010, 15:27
 
Fecha de Ingreso: agosto-2009
Mensajes: 52
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: sustituir todas las letras acentuadas

chicos se q esto es antiguo, pero en

Código:
 texto=texto.replace(/(Ñ)/gi,'N');
que significa el "gi"
  #11 (permalink)  
Antiguo 07/07/2010, 10:06
 
Fecha de Ingreso: julio-2002
Ubicación: Capital Federal
Mensajes: 66
Antigüedad: 22 años, 4 meses
Puntos: 0
Respuesta: sustituir todas las letras acentuadas

Se que es un poco tarde pero para el que le sirva...
Hice esta función para limpiar URL (reemplaza los caracteres especiales y los acentos los transforma en sus equivalentes):

Código:
String.prototype.URLlimpia = function(){
	var tmp_this = this.toLowerCase();
	var arr_busca = "áéíóúñü".split("");
	var arr_reemplaza = "aeiounu".split("");
	for(var i=0; i<arr_busca.length; i++ ){
		tmp_this = tmp_this.replace(arr_busca[i],arr_reemplaza[i]);
	}
	return tmp_this.replace(/[^\\s\w]/g,"");
}
Para llamar la funcion

Código:
"texto".URLlimpia();

Saludos!
__________________
Adrián (@ RHCP I Wanna Be Funky Flea)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:31.