忽略JavaScript中的标点符号

时间:2018-01-23 16:34:17

标签: javascript

我正在为一个大学项目开发​​一个带有JavaScript的Caeser密码加密器,并且到目前为止已经设法让它正常工作。

唯一的问题是,我需要在加密后保留标点符号(!,?等)并且我遇到了困难。这是我目前的代码:

function encryptor() {
  var alphabet = "abcdefghijklmnopqrstuvwxyz";
  var letter = "";
  var encWord = "";
  var userInput = document.getElementById("message").value;
  var key = parseInt(window.prompt("Enter a key:"));

  for (i = 0; i < userInput.length; i++) {
    letter = userInput[i];

    var shift = alphabet.indexOf(letter);

    if (letter.match("/[^A-Za-z0-9_]/")) {
      continue;
    } else if (shift < 23) {
      var encLetter = alphabet[shift + key];
    } else {
      var encLetter = alphabet[shift - (26 - key)];
    }

    encWord += encLetter;
  }

  document.getElementById("encWord").innerHTML = encWord;
}

有人可以请我指出正确的方向吗?

感谢。

3 个答案:

答案 0 :(得分:3)

continue之前,您应将letter添加到encWord

if (letter.match(/[^A-Za-z0-9_]/)) {
    encWord += letter;
    continue;
}

否则它会跳过它。

答案 1 :(得分:0)

对于keepint标点符号,你可以检查,如果字符在字母字符串中,如果没有,则使用该项的标点符号。

function encryptor() {
    var alphabet = "abcdefghijklmnopqrstuvwxyz",
        letter,
        encWord = "",
        userInput = document.getElementById('message').value,
        key = parseInt(window.prompt("Enter a key:")),
        shift,
        i;
  
    for (i = 0; i < userInput.length; i++) {
        letter = userInput[i];
        shift = alphabet.indexOf(letter);
        if (shift === -1) {
            encWord += letter;
            continue;
        }
        encWord += alphabet[(shift + key) % alphabet.length];
    }
    document.getElementById("encWord").innerHTML = encWord;
}
<input id="message" type="text" onchange="encryptor()"><br>
<div id="encWord"></div>

答案 2 :(得分:0)

最简单的方法是保持一个&#34;字母表&#34;并简单地沿着它移动,使用 for ( auto index = 0U ; index < a.numberOfItems ; ++index) { auto id = a.idList[index]; b.listOfStructures[index] = { id, doesSomeNumberExist(id) ? getRandomInt() : 0 }; } b.numberOfItems = a.numberOfItems; 来获取每个符号位置。

这是一个实现:

&#13;
&#13;
indexOf
&#13;
&#13;
&#13;

请注意我是如何忘记&#34;将var caesarCipher = (function() { var alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!"#¤%&/()=?`½§@£$€{[]}|\'*'; return function caesarCipher(message, offset) { if (offset === void 0) { offset = 1; } return message.replace(/./igm, function(letter) { if (alphabet.indexOf(letter) >= 0) { return alphabet[((alphabet.indexOf(letter) + offset) + alphabet.length) % alphabet.length]; } return letter; }); }; })(); //TEST var chipherOffset = 7; var message = "Hello World."; caesarCipher(message, chipherOffset); console.log(caesarCipher(message, chipherOffset)); console.log(caesarCipher(caesarCipher(message, chipherOffset), 0 - chipherOffset));添加到我的字母表中。这是您在维护自己的字母表时遇到的风险。

另一个解决方案是使用.charCodeAt,只需使用浏览器中已有的内置字母:

&#13;
&#13;
String.fromCharCode
&#13;
&#13;
&#13;

此解决方案修复了&#34;忘记添加符号&#34;问题,但你冒险得到一些非常奇怪的符号,如&#34; \ n&#34;,这可能真的搞乱了你的字符串!