Rot13


Question

今天学到一个简单的密码学,Rot13,就是对前字符13个字符和后13字符对调
比如:

Rot('revive') //erivir
Rot('1 + 1 =  two') //1 + 1 = gbj

Answer

一、正则replace
  • 1、将前13个和后13个字母大小写对调,列出并对应
  • 2、利用replace找出字符串中的字母
  • 3、字符在a中的位置找出并一一替换
function rot13(message) {
  var a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  var b = "nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM"
  return message.replace(/[a-z]/gi, c => b[a.indexOf(c)])
}
二、unicode编码
  • 1、找出所以字母
  • 2、获取字母的unicode的编码,并判断字母在字母表的前半段还是后半段
  • 3、如果是前半段则加13,替换成后半段字符,反之亦然,并解码为字母
const rot13 = str => 
  str.replace(/[a-z]/gi, letter => 
    String.fromCharCode(
      letter.charCodeAt(0) + (
        letter.toLowerCase() <= 'm' ? 13: -13
      )
    )
  )

第一种方法为常规操作,替换字符,基本都会用replace,一一对应进行替换就好
第二种就是神仙操作,利用unicode的方法,字符的编码是固定且有序的,对字符进行编码计算再解码即可

你可能感兴趣的:(Rot13)