仅a-z的JavaScript验证

仅a-z的JavaScript验证,javascript,Javascript,我的编码器正在打印-31而不是99,我希望输出为 8 5 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<

我的编码器正在打印-31而不是99,我希望输出为 8 5 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);
}
在if或else之后,只执行下一条指令。使用大括号在一个案例中包含多个说明,并为人类读者提供适当的缩进

此外,charCodeAt将为非BMP字符提供ASCII码或Unicode码点,但这没有帮助。你想要 相反,允许:


我认为您遇到了两个问题,一个是比较regex的方式,另一个是后续行中的代码没有使用if语句执行

考虑使用{&}for if语句来简化操作

在console works中执行的以下代码似乎具有您想要的输出

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代码

您的浏览器的调试器和console.log函数是您的朋友;使用它们来找出这些代码是如何运行的。
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