JavaScript OR运算符

时间:2013-12-05 05:49:47

标签: javascript asp.net

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

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ñÑ

时已经成功了

使用此代码

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;
        }

这个问题在于它也可以提供高于165的ascii字符,例如。 ªº¿ 但是当我添加||(event.keyCode > 166)时,特殊字符的工作没有任何效果可以帮助我只允许 的 0-9-A-ZazñÑ?我真的很难调试java脚本,因为我是这个

的新手

谢谢。

3 个答案:

答案 0 :(得分:2)

{上缺少花括号(}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;
    }
}

现在return false;仅在if条件为true时才会执行。

答案 1 :(得分:1)

假设event.keyCode是一个unicode值,你可以这样做:

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

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

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

答案 2 :(得分:0)

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