JavaScript OR operator



我很难确定我的代码出了什么问题

function NavCode() {
    if ((event.keyCode > 31 && event.keyCode < 48) || (event.keyCode > 57 && event.keyCode < 65)|| (event.keyCode > 90 && event.keyCode < 97)|| (event.keyCode > 122 && event.keyCode < 164)||(event.keyCode > 166) )
        event.returnValue = false;
        return false;
    }

我的目标是只允许0-9数字A-Za-z字母和特殊字符我成功地实现了0-9-A-Zazññnio

使用此代码

function NavCode() {
        if ((event.keyCode > 31 && event.keyCode < 48) || (event.keyCode > 57 && event.keyCode < 65)|| (event.keyCode > 90 && event.keyCode < 97)|| (event.keyCode > 122 && event.keyCode < 164))
            event.returnValue = false;
            return false;
        }

这个的问题是它也将ascii字符降到165以上,例如ªº¿但是当我添加||(event.keyCode > 166)时,特殊字符上的任何内容都不起作用,你能帮我只允许
0-9-A-Zazñnio??我真的很难调试java脚本,因为我是这个的新手

谢谢。

if上缺少大括号({}),因此return false;行始终在执行,因为没有大括号的if只有条件地执行下一行。

试试这个:

function NavCode() {
    if ((event.keyCode > 31 && event.keyCode < 48) || 
       (event.keyCode > 57 && event.keyCode < 65)|| 
       (event.keyCode > 90 && event.keyCode < 97)|| 
       (event.keyCode > 122 && event.keyCode < 164)) {
        event.returnValue = false;
        return false;
    }
}

现在,只有当if条件为true时,才会执行return false;

假设event.keyCode是unicode值,您可以执行以下操作:

if (String.fromCharCode(event.keyCode).match(/[^0-9A-Za-zñÑ]/)) {
  event.returnValue = false;
  return false;
}

它首先将event.keyCode转换为字符串(如果您可以访问该字符,请使用该字符串),然后使用正则表达式进行否定匹配(^作为范围中的第一个字符使其成为否定匹配)

使用regexp而不是检查event.keyCode的值有点慢,但在我看来它更可读。除非您的代码运行在一个紧密的循环中,并且每秒处理兆字节的数据,否则这应该不是问题。

if条件缺少大括号,这是问题的主要原因,如果没有应用大括号,则条件的右括号后面的语句只出现在if-then-else语句的'then'部分,并且无论是否满足if中的条件,每次都执行所有其他语句。

最新更新