encrypt alphabet to unicode不起作用



这是来自freecodecamp的项目,其中字符串通过移位13位的字母值加密所有字母都是大写的。不要转换任何非字母字符(即空格,标点符号),但一定要传递它们。我测试numadd通过正则表达式numadd要么等于num+13或numadd-26。有些字母出错了,不返回大写字母谁来解释一下怎么了

function rot13(str) {
var str2 = '';
var arr1 = []
var arr2 = []
var reg = /[^A-Z]/
// var char
if (str.includes(' ') == false) {
for (let i = 0; i < str.length; i++) {
var char = '';
var numres
let num = str.charCodeAt(i)
// console.log(num)
// var numadd = num + 13;
// if num+13 not uppercase
if (reg.test(num + 13)) {
numres = num - 13
}
// if num+13 is uppercase
else {
numres = num + 13
}
char = String.fromCharCode(numres)
str2 += char
}
console.log(str2);
}
}
rot13("SERRPBQRPNZC");

reg.test(num + 13)检查数字num + 13的文本表示(应用隐式类型转换),因此总是显示True(不匹配大写字母)和总是计算numres = num - 13

reg.test(String.fromCharCode(num + 13))代替,如下所示:

function rot13(str) {
var str2 = '';
var arr1 = []
var arr2 = []
var reg = /[^A-Z]/
// var char
if (str.includes(' ') == false) {
for (let i = 0; i < str.length; i++) {
var char = '';
var numres
let num = str.charCodeAt(i)
// console.log(num)
// var numadd = num + 13;
// if num+13 not uppercase
//           ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
if (reg.test(String.fromCharCode(num + 13))) {
numres = num - 13
}
// if num+13 is uppercase
else {
numres = num + 13
}
char = String.fromCharCode(numres)
str2 += char
}
console.log(str2);
}
}
rot13("SERRPBQRPNZC");

最新更新