首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ROT13 JavaScript

ROT13 JavaScript
EN

Code Review用户
提问于 2016-06-15 21:46:34
回答 2查看 28K关注 0票数 19

我写了一个ROT13密码脚本,只旋转大写字母。这个功能可以改善吗?

ROT13 13维基百科文章

代码语言:javascript
复制
function rot13(str) {

var codeA = "A".charCodeAt(0);
var codeN = "N".charCodeAt(0);
var codeZ = "Z".charCodeAt(0);
var newArr = [];

for(var i =0; i<str.length; i++){
    var code = str.charCodeAt(i);
    if(code>=codeA && code<=codeZ){
        if(code>=codeN)
            newArr.push(String.fromCharCode(code-13));
        else
            newArr.push(String.fromCharCode(code+13));
    }else{
        newArr.push(str[i]);}
    }
     return newArr.join("");
}
EN

回答 2

Code Review用户

发布于 2018-01-19 07:06:58

代码语言:javascript
复制
function rot13(str) {
  return str.replace(/([A-M])|([a-m]])|([N-Z])|([n-z])/g, function(match, p1, p2, p3, p4) {
    switch(match) {
      case p1:
      case p2:     
        return String.fromCharCode(match.charCodeAt(0) + 13);
      case p3:
      case p4:
        return String.fromCharCode(match.charCodeAt(0) - 13);
    }
  });
}

此代码应同时适用于大写和小写。p1包含匹配[A-M]的所有字符,p2包含匹配[a-m]的所有字符,p3包含匹配[N-Z]的所有字符,p4包含匹配[n-z]的所有字符。对于范围为A/aM/m的字符,将字符代码向上移动13 (+)。对于范围为N/nZ/z的字符,将char-代码向下移动13 (-)。

有关替换()函数的更多信息可以找到这里

票数 4
EN

Code Review用户

发布于 2020-11-26 04:49:46

2020 TypeScript版本:

  • 必须给出一个shift参数,但是您可以为rot13或任何其他数字选择13
代码语言:javascript
复制
// Caesar Cipher
const caesarCipher = (string: string, shift: number) => {
  // Alphabet
  const alphabet: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

  // Encoded Text
  let encodedText: string = '';

  // Adjust Shift (Over 26 Characters)
  if (shift > 26) {
    // Assign Remainder As Shift
    shift = shift % 26;
  }

  // Iterate Over Data
  let i: number = 0;
  while (i < string.length) {
    // Valid Alphabet Characters
    if (alphabet.indexOf(string[i]) !== -1) {
      // Find Alphabet Index
      const alphabetIndex: number = alphabet.indexOf((string[i]).toUpperCase());

      // Alphabet Index Is In Alphabet Range
      if (alphabet[alphabetIndex + shift]) {
        // Append To String
        encodedText += alphabet[alphabetIndex + shift];
      }
      // Alphabet Index Out Of Range (Adjust Alphabet By 26 Characters)
      else {
        // Append To String
        encodedText += alphabet[alphabetIndex + shift - 26];
      }
    }
    // Special Characters
    else {
      // Append To String
      encodedText += string[i];

    }

    // Increase I
    i++;
  }

  return encodedText;
};

示例1:

代码语言:javascript
复制
console.log(caesarCipher('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 2));

Output:
CDEFGHIJKLMNOPQRSTUVWXYZAB

示例2:

代码语言:javascript
复制
console.log(caesarCipher('GUR DHVPX OEBJA QBT WHZCRQ BIRE GUR YNML SBK.', 26 + 13));

Output:
THE QUICK BROWN DOG JUMPED OVER THE LAZY FOX.
票数 0
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/132125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档