【问题标题】:javascript string replace unicode troublesjavascript字符串替换unicode的烦恼
【发布时间】:2017-04-29 18:10:22
【问题描述】:

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

我的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”所做的那样,我使用替换来替换英文字母表中的各个字母。在这一点上,这不是一个复杂的音译。

“x”是有问题的,因为每个代码都包含一个“x”,所以我只需先搜索并替换“x”,这个小问题就解决了。

  1. 但是这个东西在搜索时不区分'r'和'R'。我该如何解决?现在,如果我音译“Rob”,它会给我 'ռ + օ + բ' 我很满意,但我没有有意对其进行编程以识别首都字母“R”。

  2. 一旦我这样做了,我该如何防止这个东西替换 'ռ' 中的 'C',即字母 'ra'?

【问题讨论】:

  • 从你的模式中删除 i。 /a/g 和 /b/g

标签: javascript html unicode


【解决方案1】:

正如 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/

【讨论】:

  • 我有点新手,所以我将不得不研究您的解决方案。无论如何,'hash' 看起来像一个对象(是吗?),'translate' 是一个数组,而 '.map' 和 '.join' 是方法?这对我来说真的很有趣,因为我的方式肯定会成立各种丑陋
  • 关闭。 translate 最终成为一个字符串。 hash 是一个对象,其中包含您希望如何改变每个字母。例如,“a”将更改为“x”,“b”将更改为“y”等。这确实是您想要更改的内容以满足您的需求。您可能想阅读地图并加入,但在“hash”中定义的所有更改完成后,“translate”最终将成为您的字符串。
  • 我已经玩过这个音译项目一段时间了,你的解决方案给了我很多好主意。我对拆分方法感到非常兴奋。为了音译随机名称,我将大量名称下载到 excel 中,使用 VBA 连接,然后在 javascript 中使用 split 转换为数组并使用 Math.floor(Math.random()*array.length) 随机选择索引跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
  • 2013-06-25
  • 2018-04-19
  • 2011-04-26
  • 2013-06-20
  • 1970-01-01
相关资源
最近更新 更多