在JavaScript中实现ROT13

时间:2015-01-20 15:57:41

标签: javascript rot13

我有一个JS函数,它按原样读取变量i。我想传递这个用ROT13编码的变量,所以我的函数首先必须解码变量然后继续。

问题是如何让JS解码并使用它。

我为ROT13找到了一个JS implementation,但我不知道在我的函数中包含这个:

{{
_inst.gmlimgp=parameter_string( 1 );
_inst.gmlsp=string_pos( "i=", _inst.gmlimgp );
if ((_inst.gmlsp!=0)) {{
_inst.gmlsp+=2;
_inst.gmlimgp=string_copy( _inst.gmlimgp, _inst.gmlsp, string_length( _inst.gmlimgp ) );
g_pBuiltIn.background_index[1]=3;
background_replace( g_pBuiltIn.background_index[1], _inst.gmlimgp, 0, 0 );
_inst.set_sprite_index( (-4) );
}
;}
 else {{
show_message( "invalid parameter" );
}
;};
}
;}

3 个答案:

答案 0 :(得分:2)

您可以在JavaScript中将其用作ROT13:

  

ERRONEOUS 1

<script>
String.prototype.rot13 = rot13 = function(s)
 {
    return (s = (s) ? s : this).split('').map(function(_)
     {
        if (!_.match(/[A-Za-z]/)) return _;
        c = Math.floor(_.charCodeAt(0) / 97);
        k = (_.toLowerCase().charCodeAt(0) - 96) % 26 + 13;
        return String.fromCharCode(k + ((c == 0) ? 64 : 96));
     }).join('');
 };
</script>

或更短的版本:

s.replace(/[a-zA-Z]/g,function(c){return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);});

参考: Where is my one-line implementation of rot13 in JavaScript going wrong?

要传递此变量i,请执行以下操作:

getRot13Input (i.rot13());

答案 1 :(得分:1)

这是一个简单的解决方案:

//This function take rot13 encoded string and decoded it as simple string.
function rot13(str) { 
  var arr = str.split('');
  var newArray = [];

 var first = {
  'A' : 'N',
  'B' : 'O',
  'C' : 'P',
  'D' : 'Q',
  'E' : 'R',
  'F' : 'S',
  'G' : 'T',
  'H' : 'U',
  'I' : 'V',
  'J' : 'W',
  'K' : 'X',
  'L' : 'Y',
  'M' : 'Z'
 };

var rest = {
'N' : 'A',
'O' : 'B',
'P' : 'C',
'Q' : 'D',
'R' : 'E',
'S' : 'F',
'T' : 'G',
'U' : 'H',
'V' : 'I',
'W' : 'J',
'X' : 'K',
'Y' : 'L',
'Z' : 'M'
};

// Iteration though the string array(arr)
for(var i = 0; i <= arr.length; i++){

  if (first.hasOwnProperty(arr[i])){       //checking first obj has the element or not

    newArray.push(first[arr[i]]);           //Pushing the element to the nerarray

  } else if(rest.hasOwnProperty(arr[i])){   //checking rest obj has the element or not

    newArray.push(rest[arr[i]]);
  } else {
    newArray.push(arr[i]);
  }
}
return newArray.join('');
}


rot13("SERR PBQR PNZC");  //call the function with rot13 encoded string

答案 2 :(得分:0)

之后添加
_inst.gmlimgp=string_copy( _inst.gmlimgp, _inst.gmlsp, string_length( _inst.gmlimgp ) );

但之前

g_pBuiltIn.background_index[1]=3;

这样调用str_rot13的行

_inst.gmlimgp= global.str_rot13(_inst.glomgp); 

PS我假设您将str_rot13功能包括为全局对象的属性。