Pregunta

¿Cómo continuaría para cambiar éëí, (etc.) a sus homólogos? es decir, eeiinn.

Estaba pensando en hacer que Regex coincida contra É -> é y reemplazar tanto y y agudo/tumba; Con cuerdas vacías, pero parece que no puedo encontrar una función AS3 que codifique acentos a sus entidades no numéricas (ê y similares). Ya he intentado usar una matriz asociativa, las entidades a la ["à"] = "A";, pero AS3 parece que no les gusta las claves Unicode.

Cualquier sugerencia sería muy apreciada.

¡Gracias!

¿Fue útil?

Solución

Esto se llama "descomposición de Unicode", por lo que es posible que desee Google para eso. Sin embargo, si está tratando con idiomas distintos de los suyos, no haga esto.

Sé que la idea parece razonable para los hablantes nativos de inglés que no conocen otros idiomas, pero para las personas para las cuales esos personajes son letras tiene tanto sentido como reemplazar "w" con "vv", "d" con "cl" y "q "Con" O ", a un hablante de inglés.

PD desde que preguntaste:

Podrías recorrer la cadena haciendo charCodeAt() Y haga su matriz asociativa en los enteros. Pero todavía no lo recomiendo.

"Doña" significa "dama" pero "dona" significa "dona". "De" significa "de" y "Dé" significa "dar". Y así sucesivamente y así sucesivamente.

No son solo letras normales con molestias molestas, en realidad son tan distintas como "E" y "F" o "P" y "R".

Otros consejos

Gracias por la respuesta.

Soy de Argentina, hablamos español y, como dijo Markusq, eliminar un acento puede cambiar todo el significado de una palabra. Pero también me gustaría decir que hay algunos escenarios en los que eliminar los acentos es mejor.

Estoy escribiendo un script para una función de búsqueda, donde puedes encontrar personas por su nombre. Los datos provienen de un formulario de registro donde las personas escriben sus nombres como les gusta, es decir: López/Lópes, Matias/Matías, etc.

Entonces, para AS3 "López" y "López" son palabras distintas y me gustaría tenerlos a ambos en los resultados de búsqueda cuando un usuario busca "López".

De esa manera, mi solución es eliminar todos los acentos y usar una máscara en el campo de texto del cuadro de búsqueda para evitar el uso de acentos. Creo que es la mejor solución, ¿alguien tiene una mejor idea? ¡Gracias!

Se corrigió esto para alemán, ya que usa "Ae" para "ä", "Oe" para "Ö", etc.

    /**
     * Helper arrays for unicode decomposition
     */
     var pattern:Array = new Array();
        pattern.push(new RegExp("Š", "g") );
        pattern.push( new RegExp("[΅]", "g"));
        pattern.push( new RegExp("Ž", "g"));
        pattern.push( new RegExp("š", "g"));
        pattern.push(new RegExp("[Ϛ]", "g"));
        pattern.push( new RegExp("ž", "g"));
        pattern.push(new RegExp("[ÀÁÂÃÅ]","g"));
        pattern.push( new RegExp("[ÆÄ]","g"));
        pattern.push( new RegExp("Ç","g"));
        pattern.push( new RegExp("[ÈÉÊË]","g"));
        pattern.push(new RegExp("[ÌÍÎÏ]", "g"));
        pattern.push( new RegExp("Ð", "g"));
        pattern.push( new RegExp("Ñ","g"));
        pattern.push( new RegExp("[ÒÓÔÕØ]", "g"));
        pattern.push( new RegExp("Ü","g"));
        pattern.push( new RegExp("[ÙÚÛ]","g"));
        pattern.push( new RegExp("[ŸÝ]", "g"));
        pattern.push( new RegExp("Þ", "g"));
        pattern.push( new RegExp("ß", "g"));
        pattern.push( new RegExp("[àáâãå]","g"));       
        pattern.push( new RegExp("[æä]","g"));
        pattern.push( new RegExp("ç","g"));
        pattern.push( new RegExp("[èéêë]","g"));
        pattern.push( new RegExp("[ìíîï]","g"));
        pattern.push( new RegExp("ð", "g"));
        pattern.push( new RegExp("ñ","g"));
        pattern.push( new RegExp("[òóôõø]", "g"));
        pattern.push( new RegExp("ü","g"));
        pattern.push( new RegExp("[ùúû]","g"));
        pattern.push( new RegExp("[ýÿ]","g"));
        pattern.push( new RegExp("þ", "g"));

         var patternReplace:Array = [
            "S",
            "Oe",
            "Z",
            "s",
            "oe",
            "z",
            "A",
            "Ae",
            "C",
            "E",
            "I",
            "D",
            "N",
            "O",
            "Ue",
            "U",
            "Y",
            "Th",
            "ss",
            "a",
            "ae",
            "c",
            "e",
            "i",
            "d",
            "n",
            "o",
            "ue",
            "u",
            "y",
            "th"];

    /**
     * Returns the Unicode decomposition of a given run of accented text. 
     * @param value The original string
     * @return The string without accents
     */     
    private static function decomposeUnicode(str:String):String
    {
        for (var i:int = 0; i < pattern.length; i++)
        {
            str = str.replace(pattern[i], patternReplace[i]);
        }
        return str;
    }
    private var sdiakA:Array;
    private var bdiakA:Array;
    private function initReplaceDiacritic(){
        var sdiak = "áäčďéěíĺľňóôöŕšťúůüýřžÁÄČĎÉĚÍĹĽŇÓÔÖŔŠŤÚŮÜÝŘŽ";
        var bdiak = "aacdeeillnooorstuuuyrzAACDEEILLNOOORSTUUUYRZ";
        sdiakA = new Array();
        bdiakA = new Array();

        for (var i=0;i<sdiak.length;i++)
            sdiakA.push(new RegExp(sdiak.charAt(i), "g"))
        for (i=0;i<sdiak.length;i++)
            bdiakA.push(bdiak.charAt(i))
    }
    private function replaceDiacritic(string:String){               
        for (var i:int = 0; i < sdiakA.length; i++)
            string = string.replace(sdiakA[i], bdiakA[i]);
        return (string)
    }
initReplaceDiacritic();
var str = replaceDiacritic("šžřáíéééíčšřčš");

Espero que esto sea útil para cualquiera:https://github.com/infralabs/diacriticsremove

Esta clase elimina los diacríticos de las cuerdas que contienen suplemento latino-1, latín extendido-a y caracteres especiales extendidos-B latinos.

uso:

var specialCharacters:String = "";
specialCharacters+="Latin-1 Supplement\n";
specialCharacters+="ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\n";
specialCharacters+="Latin Extended-A\n";
specialCharacters+="ĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſ\n";
specialCharacters+="Latin Extended-B\n";
specialCharacters+="ƒǺǻǼǽǾǿ\n";
specialCharacters+="Latin Extended Additional\n";
specialCharacters+="ẀẁẂẃẄẅỲỳ\n";

trace(new DiacriticsRemove().Parse(specialCharacters));

fuente:

Suplemento Latin-1

ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ

Latín extendido-a

ĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſ

Latín extendido-B

ƒǺǻǼǽǾǿ

Latín extendido adicional

ẀẁẂẃẄẅỲỳ

resultado:

Suplemento Latin-1

Aaaaaaaaeeeeiiiidnooooo × ouuuuythsaaaaaaaeeeeeeiiiidnoooo ÷ ouuuuythy

Latín extendido-a

AaaaaaaccccccccddddeeeeeeeeeeeEgeggggggghhhhiiiiiiiiii ijijjkkkkkllllllllllnnnnnnnnnoooooooooeRrrrssssssssssttttttuuuuuuuuuuuuuuuwwyyyzzzzss

Latín extendido-B

faaaeaeooo

Latín extendido adicional

Wwwwwwyy

Otra alternativa:

    public static function noAccent(source:String):String
    {
        source = source.replace(/[àáâãäå]/g, "a");
        source = source.replace(/[ÀÁÂÃÄÅ]/g, "A");
        source = source.replace(/[èéêë]/g, "e");
        source = source.replace(/[ËÉÊÈ]/g, "E");
        source = source.replace(/[ìíîï]/g, "i");
        source = source.replace(/[ÌÍÎÏ]/g, "I");
        source = source.replace(/[ðòóôõöø]/g, "o");
        source = source.replace(/[ÐÒÓÔÕÖØ]/g, "O");
        source = source.replace(/[ùúûü]/g, "u");
        source = source.replace(/[ÙÚÛÜ]/g, "U");
        source = source.replace(/[ýýÿ]/g, "y");
        source = source.replace(/[ÝÝŸ]/g, "Y");
        source = source.replace(/[ç]/g, "c");
        source = source.replace(/[Ç]/g, "C");
        source = source.replace(/[ñ]/g, "n");
        source = source.replace(/[Ñ]/g, "N");
        source = source.replace(/[š]/g, "s");
        source = source.replace(/[Š]/g, "S");
        source = source.replace(/[ž]/g, "z");
        source = source.replace(/[Ž]/g, "Z");
        source = source.replace(/[æ]/g, "ae");
        source = source.replace(/[Æ]/g, "AE");
        source = source.replace(/[œ]/g, "oe");
        source = source.replace(/[Œ]/g, "OE");
        return source;
    }

Fuente: http://blog.geturl.net/post/2010/01/31/§As3font>-SupPrimer-tous-les-accents-d-une-haine--caract%C3%A8re

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top