javascript字符串替换unicode麻烦

时间:2017-04-29 18:10:23

标签: javascript html unicode

我希望能够将名称音译为不同的语言。我是从亚美尼亚开始的。

我的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 = '&#x561';
    var ben = '&#x562';  
    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',然后解决这个小问题。

  1. 但是这个东西在搜索时没有区分'r'和'R'。我该如何解决这个问题?现在,如果我音译'Rob',它会给我'&amp;#x57C +&amp;#x585 +&amp; #x562'我很满意,但我没有明知将它编程为识别大写字母'R'。

  2. 一旦我这样做,我如何防止这件事取代'&amp;#x57C'中的'C'字母'ra'?

1 个答案:

答案 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/