我的编码器打印-31而不是“99”我要输出 8 5 12 12 15 0 23 15 18 12 4 99输入Hello World!
function fnEncode() {
var msg = $("textin").value.toUpperCase();
$("textin").value = msg;
var outstr = "";
var allowed = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
for (var i=0; i<msg.length; i++) {
if (msg[i] === " ") outstr += "0" + " ";
else if (isChar(i) === isChar(allowed)) outstr+="99";
else var c = msg.charCodeAt(i)-64+" ";
// var x = msg.charAt(i) + " ";
outstr+=c;
}
$("textout").value = outstr;
}
function isChar(str) {
return /^[a-zA-Z]+$/.test(str);
}
答案 0 :(得分:1)
在if
或else
之后,只执行下一条指令。使用花括号在一个案例中有多个指令,并为人类读者提供适当的缩进。
此外,charCodeAt
将为您提供ASCII代码(或非BMP字符的Unicode代码点),但这没有帮助。你想要的
而allowed
中的index代替live demo):
for (var i=0; i<msg.length; i++) {
if (msg[i] === " ") {
outstr += "0"+" ";
} else {
var idx = allowed.indexOf(msg[i].toUpperCase()); // -1 if not in allowed
outstr += (idx < 0) ? "99" : (idx + 1);
outstr += " ";
}
}
答案 1 :(得分:0)
我认为你遇到了几个问题,一个是你正在比较正则表达式和一个代码与后续行没有用if语句执行的代码
考虑使用{&amp; for if语句使事情变得更容易
在控制台中执行的以下代码似乎具有您想要的输出,
var msg = "Hello World!";
var allowed = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var outstr = "";
for (var i=0; i<msg.length; i++) {
if (msg[i] === " ") {
outstr+="0 ";
} else if (!/^[a-zA-Z]$/.test(msg[i])) {
outstr+="99";
} else {
var c = msg.charCodeAt(i)-64+" ";
outstr+=c;
}
}
console.log(outstr);
8 37 44 44 47 0 23 47 50 44 36 99
我保持我的代码与你的代码尽可能相似,但是你真的应该从@phihag中查找从字符串中获取ASCII代码的答案