如何解决当 textarea 替换为 input type = text 时,编写和解码编码消息的程序会出现故障
我有一个程序,它使用加密序列和消息生成和解码秘密消息,将字母转换为数字,在随机生成的加密序列中将数字/字母与相应的数字相加,然后程序对其进行解码通过减去,但我用代替来解释更长的消息,它出现了故障。你自己看。我已将问题隔离到 textArea。这是我的代码。
<!DOCTYPE html>
<html>
<h1>DECODE</h1>
<p>Message here</p>
<textarea id="coded message" rows="5" cols="50"> </textarea>
<p>Encryption sequence here</p>
<textarea id="encryption sequence" rows="5" cols="50"> </textarea>
<button onclick="toArray()">DECODE</button>
<p id="output"></p>
</html>
<script>
var seq = document.getElementById("encryption sequence").value;
var mes = document.getElementById("coded message").value;
var convertedSeqArray = [];
var messageDoneString = "";
var convertedMesArray = [];
var subArray = [];
var mesArray = [];
var x = 0;
var convertedMesArray = [];
var convertedSeqArray = [];
var messageDone = [];
seqArray = [];
var num = "";
function toArray() {
mes = document.getElementById("coded message").value;
mesArray = mes.split(" ");
seq = document.getElementById("encryption sequence").value;
seqArray = seq.split(",");
convertedSeqArray = seqArray.map(Number);
convertedMesArray = mesArray.map(Number);
for (var l = 0; l < mesArray.length; l++) {
subArray.push(convertedMesArray[l] - convertedSeqArray[l]);
num = String.fromCharCode(96 + subArray[l]);
messageDone.push(num);
}
for (var q = 0; q < messageDone.length; q++) {
messageDoneString = messageDoneString + messageDone[q];
}
alert(messageDoneString);
}
</script>
<html>
<h1>ENCODE</h1>
<p>Encryption sequence:</p>
<p id="sequence"></p>
<p>Coded message</p>
<p id="coded"></p>
<textarea id="h" rows = '5' cols = '50'> </textarea>
<button onclick="getList()">ENCODE</button>
<script>
var seq = document.getElementById("sequence");
var cod = document.getElementById("coded");
var array = [];
var output = document.getElementById("h").value.split("");
var sequence = [];
var sequenceCounter = 0;
function generateSequence(length) {
sequence = [];
for (var c = 0; c < length; c++) {
sequence.push(Math.floor(Math.random() * 10));
}
}
var message = "";
function getList() {
output = document.getElementById("h").value.split("");
array = output;
var length = array.length;
generateSequence(array.length);
message = "";
for (var i = 0; i < array.length; i++) {
var addNew = array[i].charCodeAt(0) - 96;
addNew = addNew + sequence[i];
message = message + " " + addNew;
}
cod.innerText = message;
seq.innerText = sequence;
}
</script>
</html>
解决方法
问题是开头的空格。如果开头有任何空格,你会得到那些奇怪的字母。我尝试用 trim()
修复它,但没有用。出于某种原因,当您复制并粘贴“编码消息”时,它会在开头处添加一个空格。您可以使用 if
语句删除空格。
mes = document.getElementById("coded message").value.trim();
mesArray = mes.split(" ");
seq = document.getElementById("encryption sequence").value.trim();
seqArray = seq.split(",");
if (mes[0] === " ")
mes.shift();
if (seq[0] === " ")
seq.shift();
convertedSeqArray = seqArray.map(Number);
convertedMesArray = mesArray.map(Number);
for (var l = 0; l < mesArray.length; l++) {
subArray.push(convertedMesArray[l] - convertedSeqArray[l]);
num = String.fromCharCode(96 + subArray[l]);
messageDone.push(num);
}
for (var q = 0; q < messageDone.length; q++) {
messageDoneString = messageDoneString + messageDone[q];
}
我确实使用了 trim
,因为它确实删除了足够的空格,直到剩下一个空格以及任何多余的空格(不应该发生)。由于两个字符串都变成了数组,我们可以对变量使用数组函数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。