Eliminar los acentos y tildes. Funcion con AS3.
Thursday, 21. January 2010
Quiero compartir una función propia creada para devolver una palabra o frase sin acentos, sin tildes, que muchas veces nos sirve para comparar palabras, frases, o en general cualquier cadena de texto sin que las tildes sean un problema para invalidar esa comparación. En otras ocasiones, queremos almacenar datos sin acentos, y trabajando en Flash con AS3 no disponemos de esta función. Por lo tanto hice una para mí, para utilizar cada que la necesito. La comparto por si alguien llega a necesitarla. Esta función sirve y está hecha para AS3 pero funciona también en AS2. Tendremos que quitar la parte que dice “as String;” en la segunda línea para que funcione con AS2.
En primer lugar vemos el código en ActionScript, y posteriormente la analizamos parte por parte. Vale aclarar que en este caso devuelve todo en minúsculas porque así la necesito, pero se puede quitar esto con borrar la tercera línea “toLowerCase()”…
El código es:
function sinAcentos(textoConAcentos) {
var texto1:String=textoConAcentos as String;
texto1=textoConAcentos.toLowerCase();
var acentos:Array=new Array("á","é","í","ó","ú");
var sinAcentos:Array=new Array("a","e","i","o","u");
function quitarAcentos(texto:String,letraSplit,letraCambio) {
var letras:Array=texto.split(letraSplit);
var nuevoTexto:String=new String();
for (var i=0;i < letras.length;i++) {
nuevoTexto+=letras[i];
nuevoTexto+=letraCambio;
}
nuevoTexto=nuevoTexto.substring(0,nuevoTexto.length-1);
return nuevoTexto;
}
for (var i=0; i < acentos.length; i++) {
texto1=quitarAcentos(texto1,acentos[i],sinAcentos[i]);
}
return texto1;
}var texto:String="Muy buenos díás áéíóúÁ";
var textoSinAcentos=sinAcentos(texto);
trace(texto); // Saldrá: "Muy buenos díás áéíóúÁ"
trace(textoSinAcentos); // Saldrá: "muy buenos dias aeioua"
Estudiemoslo por partes a continuación:
function sinAcentos(textoConAcentos) {
Declaramos la función, y le pedimos un parámetro. Este parámetro será el texto al cual le queremos eliminar los acentos (y quitar mayúsculas para este caso). Podemos almacenarlo en una variable String y pasarle el nombre de la variable, en vez del texto.
var texto1:String=textoConAcentos as String;
texto1=textoConAcentos.toLowerCase();
Definimos una variable interna (Sólo funcionará dentro de nuestra funcion, y no importa si afuera hay otra variable con el mismo nombre). En texto1 almacenamos el texto al que queremos quitar los acentos. Con “toLowerCase()” le decimos que queremos cambiar el texto a sólo minúsculas.
var acentos:Array=new Array("á","é","í","ó","ú");
var sinAcentos:Array=new Array("a","e","i","o","u");
Creamos dos array. En el primero (acentos) ponemos los caracteres que tienen acentos, que son los caracteres que vamos a buscar. Yo puse estos porque son los que uso. Pero se puede poner cualquiera, como “Ç”, “è”, “ê”, etc. En el segundo array vamos a almacenar los caracteres sin acentos, que son los caracteres por los cuales los vamos a reemplazar, justo en el mismo orden. es decir, la posición de “á” debe coincidir con “a”, la de “é”, con la de “e”, etc.
function quitarAcentos(texto:String,letraSplit,letraCambio) {
var letras:Array=texto.split(letraSplit);
var nuevoTexto:String=new String();
for (var i=0; i < letras.length; i++) {
nuevoTexto+=letras[i];
nuevoTexto+=letraCambio;
}
nuevoTexto=nuevoTexto.substring(0,nuevoTexto.length-1);
return nuevoTexto;
}
En este caso, ya tenemos todo listo para empezar a definir una función interna, que será la que realmente cambie los caracteres. Aquí necesitamos tres parámetros:
1. "texto": Es el string, ya en minúsculas, al que quitaremos los acentos.
2. "letraSplit": Será el caracter que queramos quitar.
3. "letraCambio": Será el caracter que queramos poner en reemplazo de la que quitamos.
La función sencillamente toma el texto y lo convierte en un array (a través de texto.split), separándolo en donde encuentra el caracter que queremos elminiar. Así tenemos la frase, y donde estaba el caracter, una separación. Después, escribe la frase poniendo el caracter de reemplazo donde hay separaciones. Con esto tenemos la frase habiendo reemplazado la letra acentuada por la letra no acentuada. Sin embargo al final nos escribe de nuevo esta letra. através de ".substring()" le quitamos esta ultima letra.
for (var i=0; i < acentos.length; i++) {
texto1=quitarAcentos(texto1,acentos[i],sinAcentos[i]);
}
Ya defninimos la función que buscará una letra acentuada y la reemplazará por la no acentuada. Pero no hemos llamao a la función. La función la debemos llamar tantas veces como opciones haya dentro de los arrays "acento" y "sinAcento", y para eso utilizamos el for.
return texto1;
}
Le pedimos a la función que nos devuelva la palabra o frase después de haber eliminado los acentos.
Con esto la función está lista. Ahora vamos a probarla:
var texto:String="Muy buenos díás áéíóúÁ";
var textoSinAcentos=sinAcentos(texto);
trace(texto);
trace(textoSinAcentos);
Creamos en la variable texto una frase en la cual las letras tienen acentos (y mayúsculas). En otra variable le pedimos que nos almacene este mismo texto sin acentos, haciendola igual al resultado de la función que acabamos de crear “sinAcentos(textoConAcentos);”. Podemos comparar el resultado de ambas al imprimir, a través del trace, lo que se encuentra almacenado en cada variable.
Eso es todo. La función se puede copiar y pegar directamente en panel de acciones de Flash o en la visualización de código en Flex, y sólo necesitas llamarla correctamente para que funcione. Sirve también para ActionScript 2. Lo único que habría que quitar sería el “as String” en la segunda línea.
Gracias por revisar el artículo. Saludos.
Samuel Jiménez. EsK.






Carlos Dk Says:
Muy buena la función.
Pero te saltas las declaraciones de tipos saltando warning, me tomado la libertad de pegartelo sin warnings.
public static function fSinAcentos(textoConAcentos:String):String {
var texto1:String = textoConAcentos as String;
texto1 = textoConAcentos.toLowerCase();
var acentos:Array=new Array(“á”,”é”,”í”,”ó”,”ú”);
var sinAcentos:Array=new Array(“a”,”e”,”i”,”o”,”u”);
function quitarAcentos(texto:String,letraSplit:String,letraCambio:String):String {
var letras:Array=texto.split(letraSplit);
var nuevoTexto:String=new String();
for (var i:int=0;i < letras.length;i++) {
nuevoTexto+=letras[i];
nuevoTexto+=letraCambio;
}
nuevoTexto=nuevoTexto.substring(0,nuevoTexto.length-1);
return nuevoTexto;
}
for (var i=0; i < acentos.length; i++) {
texto1 = quitarAcentos(texto1,acentos[i],sinAcentos[i]);
}
return texto1;
}
Un saludo
http://www.vertutoriales.com
eskombro Says:
Gracias por el aviso Carlos. En realidad si uno se fija en el tipo de datos que usa no tiene por qué tener problema, nunca he tenido problemas con la función. Pero claro que siempre es mejor tener la función a prueba de errores.
Mil gracias por tu aporte. Me gusta mucho encontrar personas dispuestas a aportar.
Saludos!
Alan Says:
Hola, estuve bucando un buen código para remover acentos, y aunque tal vez no la mejor manera, me sirvió bastante este ejemplo.
Les dejo el código que use después de modificarlo un poco, ¡saludos!
private function quitarAcentos(str:String):String{
var acentos:Array=new Array(“á”,”é”,”í”,”ó”,”ú”);
var sinAcentos:Array=new Array(“a”,”e”,”i”,”o”,”u”);
for(var i:int; i<acentos.length;i++){
str = str.split(acentos[i]).join(sinAcentos[i]);
}
return str;
}
AntuanF1 Says:
Muy útil gracias.