仅对a-z进行JavaScript验证

时间:2018-03-07 17:17:38

标签: javascript

我的编码器打印-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);
}

2 个答案:

答案 0 :(得分:1)

ifelse之后,只执行下一条指令。使用花括号在一个案例中有多个指令,并为人类读者提供适当的缩进。

此外,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代码的答案