2

我将如何继续将 éëíïñÑ (等)更改为他们的同行?即,eeinN。

我正在考虑对 é -> é 进行正则表达式匹配 并替换 & 和急性/严重; 使用空字符串,但我似乎找不到将重音编码为其非数字实体(ê 等)的 AS3 函数。我已经尝试过使用关联数组,即实体 ["À"] = "A";,但 AS3 似乎不喜欢 unicode 键。

任何建议将不胜感激。

谢谢!

4

6 回答 6

5

这被称为“unicode 分解”,因此您可能需要谷歌搜索。但是,如果您处理的不是您自己的语言,请不要这样做。

我知道这个想法对于不懂其他语言的以英语为母语的人来说似乎是合理的,但对于那些字符是字母的人来说,它与将“W”替换为“VV”、将“d”替换为“cl”和“Q”一样有意义" 与 "O" 对讲英语的人来说。

PS既然你问:

您可以遍历字符串charCodeAt()并在整数上执行关联数组。但我仍然不推荐它。

“Doña”的意思是“女士”,而“dona”的意思是“甜甜圈”。“de”的意思是“来自”,“dé”的意思是“给予”。等等等等。

它们不仅仅是带有恼人的飞斑的普通字母,它们实际上与“E”和“F”或“P”和“R”一样不同。

于 2009-02-25T18:47:44.360 回答
3

为德语修复了此问题,因为您将“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;
    }
于 2009-08-01T21:20:23.943 回答
3

感谢您的答复。

我来自阿根廷,我们说西班牙语,就像 MarkusQ 所说,去除口音可以改变单词的整个含义。但我还想说,在某些情况下,去除重音会更好。

我正在为搜索功能编写脚本,您可以在其中通过名字找到人。数据来自登记表,人们可以按照自己喜欢的方式写名字,例如:Lopez/Lópes、Matias/Matías 等。

因此,对于 AS3,“Lopez”和“López”是不同的词,当用户搜索“lopez”时,我希望它们都出现在搜索结果中。

这样,我的解决方案是删除所有重音符号,并在搜索框的文本字段中使用掩码来避免使用重音符号。我认为是最好的解决方案,有人有更好的主意吗?谢谢你!

于 2011-07-05T17:52:12.677 回答
2
    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("šžřáíéééíčšřčš");
于 2010-09-23T13:32:35.213 回答
2

我希望这对任何人都有用: https ://github.com/infralabs/DiacriticsRemove

此类从包含 Latin-1 Supplement、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));

来源:

拉丁语 1 补充

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

拉丁语扩展-A

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

拉丁语扩展-B

ƒǺǻǼǽǾǿ

拉丁扩展附加

ẀẁẂẃẄẅỲỳ</p>

结果:

拉丁语 1 补充

AAAAAAAECEEEEIIIIDNOOOOO×OUUUUYTHssaaaaaaaaeeeiiiidnooooo÷ouuuuythy

拉丁语扩展-A

啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊

拉丁语扩展-B

呸呸呸呸

拉丁扩展附加

万维网

于 2013-09-19T05:07:48.680 回答
0

另一种选择:

    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

于 2016-05-27T14:21:20.443 回答