Domanda

Come continuerei a cambiare Éëíïññ (ecc.) Alle loro controparti? cioè, eeiinn.

Stavo pensando di fare una corrispondenza regex contro é -> é e di sostituire entrambi e acuti/tomba; Con stringhe vuote, ma non riesco a trovare una funzione AS3 che codifica accenti alle loro entità non numeriche (ê e simili). Ho già provato a usare un array associativo, a la entità ["à"] = "a"; ma AS3 sembra non amare le chiavi Unicode.

Ogni suggerimento sarà molto apprezzato.

Grazie!

È stato utile?

Soluzione

Questo si chiama "decomposizione Unicode", quindi potresti voler Google per questo. Tuttavia, se hai a che fare con lingue diverse dalle tue, non farlo.

So che l'idea sembra ragionevole per i madrelingua inglesi che non conoscono altre lingue, ma per le persone per le quali quei personaggi sono lettere ha tanto senso quanto sostituire "w" con "vv", "d" con "cl" e "q "Con" O ", sarebbe a un madrelingua inglese.

PS da quando hai chiesto:

Potresti fare il giro della stringa facendo charCodeAt() e fai la tua matrice associativa sui numeri interi. Ma ancora non lo consiglio.

"Doña" significa "signora" ma "dona" significa "ciambella". "De" significa "da" e "dé" significa "dare". E così via e così via.

Non sono solo lettere normali con fastidiosi flyspecks, in realtà sono distinti come "E" e "F" o "P" e "R".

Altri suggerimenti

Grazie per la risposta.

Vengo dall'Argentina, parliamo spagnolo e, come ha detto Markusq, rimuovere un accento può cambiare l'intero significato di una parola. Ma vorrei anche dire che ci sono alcuni scenari in cui la rimozione degli accenti è migliore.

Sto scrivendo uno script per una funzione di ricerca, in cui puoi trovare persone con il suo nome. I dati provengono da un modulo di registrazione in cui le persone scrivono i suoi nomi come vogliono, cioè: Lopez/Lópes, Matias/Matias, ecc.

Quindi per AS3 "Lopez" e "López" sono parole distinte e vorrei averli entrambi nei risultati di ricerca quando un utente cerca "Lopez".

In questo modo, la mia soluzione è rimuovere tutti gli accenti e utilizzare una maschera nel campo di testo della casella di ricerca per evitare l'uso di accenti. Penso che sia la soluzione migliore, qualcuno ha un'idea migliore? Grazie!

Risolto questo per il tedesco, poiché usi "ae" per "ä", "oe" per "Ö" ecc.

    /**
     * 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("šžřáíéééíčšřčš");

Spero che questo sarà utile per chiunque:https://github.com/infralabs/diacriticremove

Questa classe rimuove i diaritici da stringhe contenenti integratori latini-1, latino esteso-A e caratteri speciali estesi latino.

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:

Supplemento latino-1

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

Latino esteso-a

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

Latino esteso-b

ƒǺǻǼǽǾǿ

Latino esteso aggiuntivo

ẀẁẂẃẄẅỲỳ

risultato:

Supplemento latino-1

Aaaaaaaeceeeiiiiidnooooo × ouuuuuythsaaaaaaaaeeeeiiiiiidnooooo ÷ ouuuuythy

Latino esteso-a

AaAaAaCcCcCcCcDdDdEeEeEeEeEeGgGgGgGgHhHhIiIiIiIiIiIJijJjKkĸLlLlLlLlLlNnNnNnnNnOoOoOoOEoeRrRrRrSsSsSsSsTtTtTtUuUuUuUuUuUuWwYyYZzZzZzs

Latino esteso-b

faaaeaeooo

Latino esteso aggiuntivo

Wwwwwwyy

Un'altra 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/quas3-shinprimerto-tous-les-accents-dun-chaine-de-caract%c3%a8re

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top