JavaScript 字符替换

标签 javascript

我正在尝试创建一个翻译工具,人们可以在其中将文本输入到表单中,并且每次击键都会自动将翻译处理到相应的表单中。

翻译是针对数组中的每个字符进行的。每个键将被替换为其相应的值对。

我不知道为什么文本不会输出。

这是代码:

var array = {
  'a': 'z',
  'b': 'y',
  'c': 'x',
  'd': 'w',
  'e': 'v',
  'f': 'u',
  'g': 't',
  'h': 's',
  'i': 'r',
  'j': 'q',
  'k': 'p',
  'l': 'o',
  'm': 'n',
  'n': 'm',
  'o': 'l',
  'p': 'k',
  'q': 'j',
  'r': 'i',
  's': 'h',
  't': 'g',
  'u': 'f',
  'v': 'e',
  'w': 'd',
  'x': 'c',
  'y': 'b',
  'z': 'a'
};

var english = document.getElementById('englishform');
var backwards = document.getElementById('backwardsform');

var new_str = english;

for (var key in array) {
  if (!array.hasOwnProperty(key)) {
    continue;
  }

  new_str = new_str.replace(new RegExp(key, "g"), array[key]);
}

english.value = new_str;

english.onkeyup = function() {
  backwards.value = english.value;
};
<form action="home.html" method="post">
  <textarea class="form-control" id="englishform" placeholder="Enter English" rows="15">
    </textarea>
</form>
<form>
  <textarea class="form-control" id="backwardsform" placeholder="Enter Backwards English" rows="15">
    </textarea>
</form>

最佳答案

这是一个更简单的实现,不使用映射,而是根据每个字符的 ASCII 索引进行数学替换:

(() => {
  const english = document.getElementById('englishform');
  const backwards = document.getElementById('backwardsform');
  const regexp = /([A-Z])|([a-z])/g;
  const upperBounds = [...'AZ'].map(c => c.charCodeAt(0));
  const lowerBounds = [...'az'].map(c => c.charCodeAt(0));

  function replacer(match, upper, lower) {
    let min, max;
    let value = (upper || lower).charCodeAt(0);

    if (upper) {
      [min, max] = upperBounds;
    } else {
      [min, max] = lowerBounds;
    }

    return String.fromCharCode(max - value + min);
  }

  english.addEventListener('input', () => {
    backwards.value = english.value.replace(regexp, replacer);
  });

  backwards.addEventListener('input', () => {
    english.value = backwards.value.replace(regexp, replacer);
  });
})();
html, body {
  margin: 0;
  padding: 0;
}

body {
  padding: 60px;
}

form, textarea {
  position: relative;
  width: 100%;
}
<form action="home.html" method="post">
  <textarea class="form-control" id="englishform" placeholder="Enter English"></textarea>
</form>
<form>
  <textarea class="form-control" id="backwardsform" placeholder="Enter Backwards English"></textarea>
</form>

关于JavaScript 字符替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44427698/

相关文章:

javascript - 如何在 TD 中居中跨度?

javascript - 如何在 Bootstrap 中禁用 "last pressed"按钮状态?

javascript - 需要将消息从上下文菜单发送到内容脚本

java - onKeyUp Texftield 自动生成。 HTML/JAVA

javascript - Meteor 包中 api.add_files 缺少文件

javascript - HTML/CSS 内联文本区域将宽度设置为与输入相同

javascript - 对 getElementById 的说明

javascript - 如何打乱 JSON.parse 数据?

javascript - 关于一段 jQuery 的问题

javascript - 如果第二个不为空,则 Ng-options 下拉连接字段