Замена акцентов с их аналогами в AS3 - PullRequest
2 голосов
/ 25 февраля 2009

Как бы я продолжил обменивать их (и т.д.) на своих коллег? т. е. eeiinN.

Я думал о сопоставлении регулярных выражений с é -> & eacute; и заменив и & и острый / серьезный; с пустыми строками, но я не могу найти функцию AS3, которая кодирует акценты для их нечисловых объектов (и т. д.). Я уже пытался использовать ассоциативный массив, а-ля сущности ["À"] = "A"; но AS3, похоже, не нравится ключи Unicode.

Любые предложения будут с благодарностью.

Спасибо!

Ответы [ 6 ]

5 голосов
/ 25 февраля 2009

Это называется «декомпозиция в юникоде», так что вы можете использовать Google для этого. Однако, если вы имеете дело с языками, отличными от вашего, не делайте этого.

Я знаю, что идея кажется разумной носителям английского языка, которые не знают других языков, но людям, для которых эти символы являются буквами, имеет такой же смысл, как и замена "W" на "VV", "d" на "cl" и "Q" с "O" означало бы говорящий на английском языке.

P.S. Так как вы спросили:

Вы можете перебрать строку, выполнив charCodeAt(), и создать ассоциативный массив для целых чисел. Но я все еще не рекомендую это.

«Донья» означает «леди», но «донья» означает «пончик». «Де» означает «от» и «де» означает «дать». И так далее.

Это не просто обычные буквы с назойливыми мухами, они на самом деле так же различны, как "E" и "F" или "P" и "R".

3 голосов
/ 05 июля 2011

Спасибо за ответ.

Я из Аргентины, мы говорим по-испански, и, как сказал MarkusQ, удаление акцента может изменить весь смысл слова. Но я также хотел бы сказать, что есть некоторые сценарии, в которых удаление акцентов лучше.

Я пишу скрипт для функции поиска, где вы можете найти людей по имени. Данные поступают из регистрационной формы, где люди пишут имена так, как им нравится, например: Лопес / Лопес, Матиас / Матиас и т. Д.

Таким образом, для AS3 "Lopez" и "López" - это разные слова, и я хотел бы, чтобы они оба были в результатах поиска, когда пользователь ищет слово "lopez".

Таким образом, мое решение состоит в том, чтобы удалить все акценты и использовать маску в текстовом поле окна поиска, чтобы избежать использования акцентов. Я думаю, это лучшее решение, у кого есть идея получше? Спасибо!

3 голосов
/ 02 августа 2009

Исправлено для немецкого языка, когда вы используете «Ae» для «Ä», «Oe» для «Ö» и т. Д.

    /**
     * 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;
    }
2 голосов
/ 19 сентября 2013

Надеюсь, это будет полезно всем: https://github.com/infralabs/DiacriticsRemove

Этот класс удаляет диакритические знаки из строк, содержащих специальные символы Latin-1, Latin-Extended-A и Latin-Extended-B.

использование:

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

Источник:

Приложение Latin-1

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

Latin Extended-A

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

Latin Extended-B

ƒǺǻǼǽǾǿ

Латинская расширенная дополнительная

ẀẁẂẃẄẅỲỳ

результат:

Приложение Latin-1

AAAAAAAECEEEEIIIIDNOOOOO × OUUUUYTHssaaaaaaaeceeeeiiiidnooooo ÷ ouuuuythy

Latin Extended-A

AaAaAaCcCcCcCcDdDdEeEeEeEeEeGgGgGgGgHhHhIiIiIiIiIiIJijJjKkĸLlLlLlLlLlNnNnNnnNnOoOoOoOEoeRrRrRrSsSsSsSsTtTtTtUuUuUuUuUuUuWwYyYZzZzZzs

Latin Extended-B

fAaAEaeOo

Латинская расширенная дополнительная

WwWwWwYy

2 голосов
/ 23 сентября 2010
    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("šžřáíéééíčšřčš");
0 голосов
/ 27 мая 2016

Другая альтернатива:

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

Источник: http://blog.geturl.net/post/2010/01/31/[AS3]-Supprimer-tous-les-accents-d-une-chaine-de-caract%C3%A8re

...