JavaScript凯撒密码实现:如何忽略特殊字符与空格加密
解决JavaScript加密程序保留特殊字符和空格的问题
你的代码目前会把所有输入字符(包括空格、标点这类特殊字符)都进行移位处理,要保留这些非字母字符,只需要在加密逻辑里增加字符类型判断即可。
修改思路
在shiftLetter函数中,先判断当前字符是否为小写字母(因为你已经把输入转成了全小写):
- 如果是a-z范围内的字母,执行原有的移位加密逻辑
- 如果不是字母(比如空格、!、@等),直接返回原字符,不做加密
修改后的完整代码
let userInput = prompt("Please enter any text to encrypt it:"); let lowerInput = userInput.toLowerCase(); function startEncryption() { let encryptedMessage = ""; let shift = 15; for (letter of lowerInput) { encryptedMessage += shiftLetter(letter, shift); } console.log(encryptedMessage); } startEncryption(); function shiftLetter(letter, shift) { let letterCode = letter.charCodeAt(0); // 判断是否为小写字母,不是则直接返回原字符 if (letterCode < 97 || letterCode > 122) { return letter; } let newLetterCode = letterCode + shift; // 处理字母循环(超过z或者小于a的情况) if (newLetterCode > 122) { newLetterCode -= 26; } else if (newLetterCode < 97) { newLetterCode += 26; } return String.fromCharCode(newLetterCode); }
关键修改点说明
- 在
shiftLetter函数开头新增判断:if (letterCode < 97 || letterCode > 122) { return letter; },直接过滤非字母字符 - 原有移位逻辑只对字母生效,空格、数字、标点等都会原样保留
这样修改后,输入中的空格和特殊字符就不会被加密,只会处理a-z的字母。
内容的提问来源于stack exchange,提问作者JadenBotha
相关产品推荐
相关产品推荐

