Frage

Wie würde ich weitermachen, um Éëíïññ (usw.) in ihre Kollegen zu wechseln? dh, eeiinn.

Ich habe darüber nachgedacht, Regex gegen é -> é zu machen und sowohl & als auch akute/grave zu ersetzen. Mit leeren Saiten, aber ich kann keine AS3-Funktion finden, die Akzente für ihre nicht numerischen Wesenheiten (ê und dergleichen) codiert. Ich habe bereits versucht, ein assoziatives Array zu verwenden, a la Entitäten ["à"] = "a";, aber As3 scheint die Unicode -Schlüssel nicht zu mögen.

Alle Vorschläge wären sehr geschätzt.

Vielen Dank!

War es hilfreich?

Lösung

Dies nennt man "Unicode -Zerlegung", daher möchten Sie dafür vielleicht googeln. Wenn Sie jedoch mit anderen Sprachen als Ihren eigenen zu tun haben, tun Sie dies nicht.

Ich weiß, die Idee scheint für englische Muttersprachler, die keine anderen Sprachen kennen, vernünftig zu "Mit" O "würde ein englischer Sprecher.

Ps seit du gefragt hast:

Sie könnten durch die Zeichenfolge durchgehen charCodeAt() Und machen Sie Ihr assoziatives Array auf den Ganzzahlen. Aber ich empfehle es immer noch nicht.

"Doña" bedeutet "Dame", aber "Dona" bedeutet "Donut". "DE" bedeutet "von" und "Dé" bedeutet "Give". Und so weiter und so fort.

Sie sind nicht nur normale Buchstaben mit nervigen Fliegenschalen, sondern auch so unterschiedlich wie "E" und "F" und "P" und "R".

Andere Tipps

Danke für die Antwort.

Ich komme aus Argentinien, wir sprechen Spanisch und wie Markusq sagte, kann das Entfernen eines Akzents die gesamte Bedeutung eines Wortes ändern. Aber ich möchte auch sagen, dass es einige Szenarien gibt, in denen das Entfernen der Akzente besser ist.

Ich schreibe ein Skript für eine Suchfunktion, in der Sie Leute mit seinem Namen finden können. Die Daten stammen aus einem Registrierungsformular, in dem die Leute es schreiben, wie sie möchten, dh Lopez/Lópes, Matias/Matías usw.

Für AS3 "Lopez" und "López" sind also unterschiedliche Wörter, und ich möchte sie beide in den Suchergebnissen haben, wenn ein Benutzer nach "Lopez" sucht.

Auf diese Weise besteht meine Lösung darin, alle Akzente zu entfernen und eine Maske im Textfeld des Suchfelds zu verwenden, um die Verwendung von Akzenten zu vermeiden. Ich denke, ist die beste Lösung, jemand hat eine bessere Idee? Danke!

Es wurde dies für Deutsch behoben, wie Sie "ae" für "ä", "oe" für "ö" usw. verwenden usw.

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

Ich hoffe, dies wird für jeden nützlich sein:https://github.com/infralabs/diacriticsremove

Diese Klasse entfernt Diakritik aus Strings, die lateinamerikanische Nahrungsergänzungsmittel, lateinamerikanische Extended-A und Latin Extended-B-Sonderzeichen enthalten.

Verwendungszweck:

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

Quelle:

Latein-1-Ergänzung

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

Latein erweitert-a

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

Latein erweitert-b

ƒǺǻǼǽǾǿ

Latein erweiterte zusätzlich

ẀẁẂẃẄẅỲỳ

Ergebnis:

Latein-1-Ergänzung

AaaaaaaeeceeeiiiiDnooooo × ouuuuythssaaaaaaaeeeeieiiiidnoooooo ÷ ouuuuythy

Latein erweitert-a

AaAaAaCcCcCcCcDdDdEeEeEeEeEeGgGgGgGgHhHhIiIiIiIiIiIJijJjKkĸLlLlLlLlLlNnNnNnnNnOoOoOoOEoeRrRrRrSsSsSsSsTtTtTtUuUuUuUuUuUuWwYyYZzZzZzs

Latein erweitert-b

faaaaeaeoo

Latein erweiterte zusätzlich

Wwwwwwyy

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

Quelle: http://blog.geturl.net/post/2010/01/31/[as3]-supprimer-tous-les-accent-d-une-chaine-caract%c3%A8re

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top