簡體   English   中英

將字母表加密為 unicode 不起作用

[英]encrypt alphabet to unicode does not work

這是來自 freecodecamp 的項目,其中一個字符串是通過將字母的值移動 13 個位置來加密的,所有字母都是大寫的。 不要轉換任何非字母字符(即空格、標點符號),但要傳遞它們。 我通過正則表達式測試 numadd numadd 等於 num+13 或 numadd-26。 有些字母出錯了,不返回大寫字母請有人解釋怎么了

 function rot13(str) { var str2 = ''; var arr1 = [] var arr2 = [] var reg = /[^AZ]/ // 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 = /[^AZ]/ // 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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM