这是来自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");