我希望能够将名称音译为不同的语言。我是从亚美尼亚开始的。
我的HTML是这样的:
<input type="text" class="name"></input><br>
<p class="transliterated"></p>
<button id="button">transliterate!</button>
我的javascript是这样的:
var buttonEl = document.getElementById("button");
buttonEl.addEventListener("click", getArmenian);
function getArmenian() {
var inputEl = document.getElementsByClassName("name");
var outputEl = document.getElementsByClassName("transliterated");
for (var i = 0; i < inputEl.length; i++) {
var nameEl = inputEl[i].value;
var ayb = 'ա';
var ben = 'բ';
var nameEl = nameEl.replace(/a/gi, ayb);
var nameEl = nameEl.replace(/b/gi, ben);
outputEl[i].innerHTML = nameEl;
}
}
在上面的例子中,我选择了字母a和b,并分别用亚美尼亚字符'ayb'和'ben'替换它们。
到目前为止一切顺利。
泡菜从这里开始:我已经为亚美尼亚字母的所有字母定义变量,就像我为'ayb'所做的那样,我用replace替换了英文字母的相应字母。这不是一个复杂的音译。
'x'是有问题的,因为每个代码都包含一个'x',所以我先搜索并替换'x',然后解决这个小问题。
但是这个东西在搜索时没有区分'r'和'R'。我该如何解决这个问题?现在,如果我音译'Rob',它会给我'&amp;#x57C +&amp;#x585 +&amp; #x562'我很满意,但我没有明知将它编程为识别大写字母'R'。
一旦我这样做,我如何防止这件事取代'&amp;#x57C'中的'C'字母'ra'?
答案 0 :(得分:0)
正如NULL-POINTER所提到的,这是因为如果你的“i”处于正则表达式模式中。我认为你会有很多这些“有问题”的事件通过正则表达式来做,因为多个字母可能有这个确切的问题。我建议改为使用哈希来表示音译。我做了一个例子,将a,b和c映射到x,y和z。当然你想写自己的哈希,但这里是这个想法的要点:
var hash = {
a: "x",
b: "y",
c: "z"
};
var str = "abcdddcba";
// first, do a split so each letter is a part of the array
var translate = str.split("")
// then when you have an array of letters, you can map it to the new values in the hash, and default it to itself if no match is found
.map((letter) => hash[letter] || letter)
// next, join all of the letters back together
.join("");
你可以在我为你做的小提琴上查看:https://jsfiddle.net/fwkr94Le/