Question

Comment pourrais-je changer éIíïññ (etc.) à leurs homologues? c'est-à-dire, eeiinn.

Je pensais faire un match regex contre é -> é et remplacer les deux et et la tombe; Avec des cordes vides, mais je n'arrive pas à trouver une fonction AS3 qui code pour les accents à leurs entités non numériques (Ê et similaires). J'ai déjà essayé d'utiliser un tableau associatif, à la entités ["à"] = "a"; mais AS3 semble détester les clés Unicode.

Toutes les suggestions seraient grandement appréciées.

Merci!

Était-ce utile?

La solution

C'est ce qu'on appelle la "décomposition Unicode", vous voudrez peut-être Google pour cela. Cependant, si vous avez affaire à des langues autres que les vôtres, ne le faites pas.

Je sais que l'idée semble raisonnable pour les anglophones natifs qui ne connaissent aucune autre langue, mais pour les personnes pour qui ces personnages sont des lettres, cela a autant de sens que de remplacer "W" par "VV", "D" par "CL" et "Q "Avec" O ", serait à un anglophone.

PS depuis que vous avez demandé:

Vous pouvez traverser la chaîne en faisant charCodeAt() Et faites votre tableau associatif sur les entiers. Mais je ne le recommande toujours pas.

"Doña" signifie "dame" mais "Dona" signifie "beignet". "De" signifie "de" et "de" signifie "donner". Et ainsi de suite.

Ce ne sont pas seulement des lettres normales avec des taches de mouches ennuyeuses, elles sont en fait aussi distinctes que "E" et "F" ou "P" et "R".

Autres conseils

Merci pour votre réponse.

Je viens d'Argentine, nous parlons espagnol, et comme l'a dit Markusq, la suppression d'un accent peut changer le sens entier d'un mot. Mais je voudrais également dire qu'il y a des scénarios où le retrait des accents est un meilleur.

J'écris un script pour une fonction de recherche, où vous pouvez trouver des gens par son nom. Les données proviennent d'un formulaire d'inscription où les gens écrivent ses noms comme ils le souhaitent, c'est-à-dire: Lopez / Lópes, Matias / Matías, etc.

Donc, pour AS3 "Lopez" et "López" sont des mots distincts et j'aimerais les avoir tous les deux dans les résultats de recherche lorsqu'un utilisateur recherche "Lopez".

De cette façon, ma solution consiste à supprimer tous les accents et à utiliser un masque dans le champ de recherche de la zone de recherche pour éviter l'utilisation d'accents. Je pense que c'est la meilleure solution, quelqu'un a une meilleure idée? Merci!

Correction de cela pour l'allemand, comme vous utilisez "ae" pour "ä", "oe" pour "Ö" 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("šžřáíéééíčšřčš");

J'espère que cela sera utile pour quiconque:https://github.com/infralabs/diacriticsRemove

Cette classe supprime les diacritiques des chaînes contenant un supplément latin-1, des caractères spéciaux Latin Extended-A et Latin Extend-B.

usage:

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

la source:

Supplément latin-1

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

Latin Extended-A

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

Latin étendu-b

ƒǺǻǼǽǾǿ

Latin étendu supplémentaire

ẀẁẂẃẄẅỲỳ

résultat:

Supplément latin-1

Aaaaaaaeeeeeiiiidnooooo × ouuuUythssaaaaaaaeeeeeiiiidnooooo ÷ ouuuUuthy

Latin Extended-A

AaaaaacccccccccddddeeeeeeeeeeeggggggggghhhhiiiiiiiiiijijjjkĸllllllllnnnnnnnnooooooerrrrrrssssssssttttttTUUUUUUUUUWWYYYSSSZZZZS

Latin étendu-b

faaaeaeoo

Latin étendu supplémentaire

Wwwwwwyy

Une autre alternative:

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

La source: http://blog.getUrl.net/post/2010/01/31/003

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top