Pergunta

Como eu continuaria mudando Éëíïne (etc) para seus colegas? IE, Eeiinn.

Eu estava pensando em fazer regex combinando contra é -> é e substituindo ambos e e sepulturas agudas; Com cordas vazias, mas não consigo encontrar uma função AS3 que coda detalhes em suas entidades não numéricas (Ê e similares). Eu já tentei usar uma matriz associativa, a la entidades ["À"] = "A";, mas o AS3 parece não gostar das teclas Unicode.

Quaisquer sugestões seriam muito apreciadas.

Obrigado!

Foi útil?

Solução

Isso é chamado de "Decomposição Unicode", então você pode querer pesquisar no Google para isso. No entanto, se você estiver lidando com outros idiomas que não os seus, não faça isso.

Eu sei que a idéia parece razoável para falantes nativos de inglês que não conhecem outros idiomas, mas para pessoas para as quais esses personagens são letras, faz tanto sentido quanto substituir "W" por "VV", "D" com "Cl" e "Q "Com" O ", faria com um falante de inglês.

PS desde que você perguntou:

Você pode fazer uma pancada na corda fazendo charCodeAt() E faça sua matriz associativa nos números inteiros. Mas ainda não recomendo.

"Doña" significa "senhora", mas "dona" significa "donut". "De" significa "de" e "dé" significa "dar". E assim por diante.

Eles não são apenas letras normais com moscas irritantes, são realmente tão distintas quanto "e" e "f" ou "p" e "r".

Outras dicas

Obrigado pela resposta.

Sou da Argentina, falamos espanhol e, como Markusq disse, remover um sotaque pode mudar todo o significado de uma palavra. Mas também gostaria de dizer que existem alguns cenários em que remover os sotaques é melhor.

Estou escrevendo um script para uma função de pesquisa, onde você pode encontrar pessoas pelo seu nome. Os dados vêm de um formulário de registro em que as pessoas escrevem seus nomes da maneira que gostam, ou seja: Lopez/Lópes, Matias/Matías, etc.

Portanto, para AS3 "Lopez" e "López" são palavras distintas e eu gostaria de tê -las nos resultados da pesquisa quando um usuário procura "Lopez".

Dessa forma, minha solução é remover todos os sotaques e usar uma máscara no campo de texto da caixa de pesquisa para evitar o uso de sotaques. Eu acho que é a melhor solução, alguém tem uma ideia melhor? Obrigada!

Corrigido isso para o alemão, como você 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 isso seja útil para qualquer pessoa:https://github.com/infralabs/diacriticsremove

Esta classe remove os diacríticos de strings contendo suplemento latino-1, caracteres especiais Latin Extended-A e Latin Extended-B.

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));

fonte:

Suplemento Latin-1

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

Latim estendido-a

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

Latim Extended-B

ƒǺǻǼǽǾǿ

O latim se estendeu adicional

ẀẁẂẃẄẅỲỳ

resultado:

Suplemento Latin-1

Aaaaaaaeceeeiiiidnooooo × ouuuuythsaaaaaaaeceeeiiiidnooooo

Latim estendido-a

AaAaAaCcCcCcCcDdDdEeEeEeEeEeGgGgGgGgHhHhIiIiIiIiIiIJijJjKkĸLlLlLlLlLlNnNnNnnNnOoOoOoOEoeRrRrRrSsSsSsSsTtTtTtUuUuUuUuUuUuWwYyYZzZzZzs

Latim Extended-B

Faaaaeoo

O latim se estendeu adicional

Wwwwwwyy

Outra 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;
    }

Fonte: http://blog.geturl.net/post/2010/01/31/[as3 ]-supplimer-tous-les-accents-d-une-chaine-de-caract%C3%A8re

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top