kyn*_*yng 11 javascript transliteration
我做了这个功能:
function transliterate(word){
var answer = "";
A = new Array();
A["?"]="YO";A["?"]="I";A["?"]="TS";A["?"]="U";A["?"]="K";A["?"]="E";A["?"]="N";A["?"]="G";A["?"]="SH";A["?"]="SCH";A["?"]="Z";A["?"]="H";A["?"]="'";
A["?"]="yo";A["?"]="i";A["?"]="ts";A["?"]="u";A["?"]="k";A["?"]="e";A["?"]="n";A["?"]="g";A["?"]="sh";A["?"]="sch";A["?"]="z";A["?"]="h";A["?"]="'";
A["?"]="F";A["?"]="I";A["?"]="V";A["?"]="A";A["?"]="P";A["?"]="R";A["?"]="O";A["?"]="L";A["?"]="D";A["?"]="ZH";A["?"]="E";
A["?"]="f";A["?"]="i";A["?"]="v";A["?"]="a";A["?"]="p";A["?"]="r";A["?"]="o";A["?"]="l";A["?"]="d";A["?"]="zh";A["?"]="e";
A["?"]="YA";A["?"]="CH";A["?"]="S";A["?"]="M";A["?"]="I";A["?"]="T";A["?"]="'";A["?"]="B";A["?"]="YU";
A["?"]="ya";A["?"]="ch";A["?"]="s";A["?"]="m";A["?"]="i";A["?"]="t";A["?"]="'";A["?"]="b";A["?"]="yu";
for (i in word){
if (A[word[i]] === 'undefined'){
answer += word[i];
}
else {
answer += A[word[i]];
}
return answer;
}
}
Run Code Online (Sandbox Code Playgroud)
现在它应该将西里尔文本音译为拉丁语,让拉丁语简单地通过.但是它只能设法在第一个音译之后进行音译,而在拉丁语的情况下它会给出未定义的答案.任何人都可以给我一个想法,我做错了什么?
Spl*_*ity 43
几件事......
这是代码
function transliterate(word){
var answer = ""
, a = {};
a["?"]="YO";a["?"]="I";a["?"]="TS";a["?"]="U";a["?"]="K";a["?"]="E";a["?"]="N";a["?"]="G";a["?"]="SH";a["?"]="SCH";a["?"]="Z";a["?"]="H";a["?"]="'";
a["?"]="yo";a["?"]="i";a["?"]="ts";a["?"]="u";a["?"]="k";a["?"]="e";a["?"]="n";a["?"]="g";a["?"]="sh";a["?"]="sch";a["?"]="z";a["?"]="h";a["?"]="'";
a["?"]="F";a["?"]="I";a["?"]="V";a["?"]="a";a["?"]="P";a["?"]="R";a["?"]="O";a["?"]="L";a["?"]="D";a["?"]="ZH";a["?"]="E";
a["?"]="f";a["?"]="i";a["?"]="v";a["?"]="a";a["?"]="p";a["?"]="r";a["?"]="o";a["?"]="l";a["?"]="d";a["?"]="zh";a["?"]="e";
a["?"]="Ya";a["?"]="CH";a["?"]="S";a["?"]="M";a["?"]="I";a["?"]="T";a["?"]="'";a["?"]="B";a["?"]="YU";
a["?"]="ya";a["?"]="ch";a["?"]="s";a["?"]="m";a["?"]="i";a["?"]="t";a["?"]="'";a["?"]="b";a["?"]="yu";
for (i in word){
if (word.hasOwnProperty(i)) {
if (a[word[i]] === undefined){
answer += word[i];
} else {
answer += a[word[i]];
}
}
}
return answer;
}
Run Code Online (Sandbox Code Playgroud)
功能更强大就是这样......
var a = {"?":"YO","?":"I","?":"TS","?":"U","?":"K","?":"E","?":"N","?":"G","?":"SH","?":"SCH","?":"Z","?":"H","?":"'","?":"yo","?":"i","?":"ts","?":"u","?":"k","?":"e","?":"n","?":"g","?":"sh","?":"sch","?":"z","?":"h","?":"'","?":"F","?":"I","?":"V","?":"a","?":"P","?":"R","?":"O","?":"L","?":"D","?":"ZH","?":"E","?":"f","?":"i","?":"v","?":"a","?":"p","?":"r","?":"o","?":"l","?":"d","?":"zh","?":"e","?":"Ya","?":"CH","?":"S","?":"M","?":"I","?":"T","?":"'","?":"B","?":"YU","?":"ya","?":"ch","?":"s","?":"m","?":"i","?":"t","?":"'","?":"b","?":"yu"};
function transliterate(word){
return word.split('').map(function (char) {
return a[char] || char;
}).join("");
}
Run Code Online (Sandbox Code Playgroud)
Ali*_*dov 13
在我的项目中,我使用这种音译方法:
var transliterate = function(text) {
text = text
.replace(/\u0401/g, 'YO')
.replace(/\u0419/g, 'I')
.replace(/\u0426/g, 'TS')
.replace(/\u0423/g, 'U')
.replace(/\u041A/g, 'K')
.replace(/\u0415/g, 'E')
.replace(/\u041D/g, 'N')
.replace(/\u0413/g, 'G')
.replace(/\u0428/g, 'SH')
.replace(/\u0429/g, 'SCH')
.replace(/\u0417/g, 'Z')
.replace(/\u0425/g, 'H')
.replace(/\u042A/g, '')
.replace(/\u0451/g, 'yo')
.replace(/\u0439/g, 'i')
.replace(/\u0446/g, 'ts')
.replace(/\u0443/g, 'u')
.replace(/\u043A/g, 'k')
.replace(/\u0435/g, 'e')
.replace(/\u043D/g, 'n')
.replace(/\u0433/g, 'g')
.replace(/\u0448/g, 'sh')
.replace(/\u0449/g, 'sch')
.replace(/\u0437/g, 'z')
.replace(/\u0445/g, 'h')
.replace(/\u044A/g, "'")
.replace(/\u0424/g, 'F')
.replace(/\u042B/g, 'I')
.replace(/\u0412/g, 'V')
.replace(/\u0410/g, 'a')
.replace(/\u041F/g, 'P')
.replace(/\u0420/g, 'R')
.replace(/\u041E/g, 'O')
.replace(/\u041B/g, 'L')
.replace(/\u0414/g, 'D')
.replace(/\u0416/g, 'ZH')
.replace(/\u042D/g, 'E')
.replace(/\u0444/g, 'f')
.replace(/\u044B/g, 'i')
.replace(/\u0432/g, 'v')
.replace(/\u0430/g, 'a')
.replace(/\u043F/g, 'p')
.replace(/\u0440/g, 'r')
.replace(/\u043E/g, 'o')
.replace(/\u043B/g, 'l')
.replace(/\u0434/g, 'd')
.replace(/\u0436/g, 'zh')
.replace(/\u044D/g, 'e')
.replace(/\u042F/g, 'Ya')
.replace(/\u0427/g, 'CH')
.replace(/\u0421/g, 'S')
.replace(/\u041C/g, 'M')
.replace(/\u0418/g, 'I')
.replace(/\u0422/g, 'T')
.replace(/\u042C/g, "'")
.replace(/\u0411/g, 'B')
.replace(/\u042E/g, 'YU')
.replace(/\u044F/g, 'ya')
.replace(/\u0447/g, 'ch')
.replace(/\u0441/g, 's')
.replace(/\u043C/g, 'm')
.replace(/\u0438/g, 'i')
.replace(/\u0442/g, 't')
.replace(/\u044C/g, "'")
.replace(/\u0431/g, 'b')
.replace(/\u044E/g, 'yu');
return text;
};
Run Code Online (Sandbox Code Playgroud)
运行此示例以进行音译:
transliterate('??????????????????????????????????????????????????????????????????');
Run Code Online (Sandbox Code Playgroud)
我用他们的unicode类似物替换了所有俄语字母(每个字母以\ u开头)来解决Javascript文件中的编码问题.
为了检查执行速度,我对这个问题给出了最佳答案,并将其与我的例子进行了比较.我的方法似乎在几次更快(Firebug中的0.16 ms :-).
小智 7
不要使用数组来执行此任务。不要用于for in迭代字符串。不要对照字符串进行检查"undefined"。不要在循环return内for。
function transliterate(word) {\n var A = {};\n var result = \'\';\n\n A["\xd0\x81"]="YO";A["\xd0\x99"]="I";A["\xd0\xa6"]="TS";A["\xd0\xa3"]="U";A["\xd0\x9a"]="K";A["\xd0\x95"]="E";A["\xd0\x9d"]="N";A["\xd0\x93"]="G";A["\xd0\xa8"]="SH";A["\xd0\xa9"]="SCH";A["\xd0\x97"]="Z";A["\xd0\xa5"]="H";A["\xd0\xaa"]="\'";\n A["\xd1\x91"]="yo";A["\xd0\xb9"]="i";A["\xd1\x86"]="ts";A["\xd1\x83"]="u";A["\xd0\xba"]="k";A["\xd0\xb5"]="e";A["\xd0\xbd"]="n";A["\xd0\xb3"]="g";A["\xd1\x88"]="sh";A["\xd1\x89"]="sch";A["\xd0\xb7"]="z";A["\xd1\x85"]="h";A["\xd1\x8a"]="\'";\n A["\xd0\xa4"]="F";A["\xd0\xab"]="I";A["\xd0\x92"]="V";A["\xd0\x90"]="A";A["\xd0\x9f"]="P";A["\xd0\xa0"]="R";A["\xd0\x9e"]="O";A["\xd0\x9b"]="L";A["\xd0\x94"]="D";A["\xd0\x96"]="ZH";A["\xd0\xad"]="E";\n A["\xd1\x84"]="f";A["\xd1\x8b"]="i";A["\xd0\xb2"]="v";A["\xd0\xb0"]="a";A["\xd0\xbf"]="p";A["\xd1\x80"]="r";A["\xd0\xbe"]="o";A["\xd0\xbb"]="l";A["\xd0\xb4"]="d";A["\xd0\xb6"]="zh";A["\xd1\x8d"]="e";\n A["\xd0\xaf"]="YA";A["\xd0\xa7"]="CH";A["\xd0\xa1"]="S";A["\xd0\x9c"]="M";A["\xd0\x98"]="I";A["\xd0\xa2"]="T";A["\xd0\xac"]="\'";A["\xd0\x91"]="B";A["\xd0\xae"]="YU";\n A["\xd1\x8f"]="ya";A["\xd1\x87"]="ch";A["\xd1\x81"]="s";A["\xd0\xbc"]="m";A["\xd0\xb8"]="i";A["\xd1\x82"]="t";A["\xd1\x8c"]="\'";A["\xd0\xb1"]="b";A["\xd1\x8e"]="yu";\n\n for(var i = 0; i < word.length; i++) {\n var c = word.charAt(i);\n\n result += A[c] || c;\n }\n\n return result;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n\n
| 归档时间: |
|
| 查看次数: |
17856 次 |
| 最近记录: |