任何人都可以帮助我吗?
这似乎不起作用:
switch (parseInt(charCode))
{
case (charCode >= 65 && charCode <=90): //UPPERCASE
alert("UP");
break;
case (charCode >= 97 && charCode <=122): //LOWERCASE
alert("LO");
break;
case (charCode >= 48 && charCode <=57): //NNUMBERS
alert("NUM");
break
}
由于
答案 0 :(得分:5)
案例必须是单个值,而不是表达式。如果您需要使用表达式,请使用if
else if
系列:
var numCharCode = parseInt(charCode, 10); // Always best to include the radix argument
if (numCharCode >= 65 && numCharCode <=90) { //UPPERCASE
alert("UP");
}
else if (numCharCode >= 97 && numCharCode <=122) { //LOWERCASE
alert("LO");
}
else if (numCharCode >= 48 && numCharCode <=57) { //NNUMBERS
alert("NUM");
}
(总是假设charCode
首先是一个字符串。这个名字表明它已经是一个数字了。)
偏离主题:您的逻辑以英语为中心(即使是英语,我们从其他语言复制的词语也是如此,例如“天真”)。如果那没关系,那很好,但如果没有,你会想要更多地了解如何以语言中立的方式可靠地确定角色的情况。这是StackOverflow上的More in this answer。
答案 1 :(得分:1)
[编辑]让我们添加此免责声明:switch
的使用被视为EVIL或ABUSIVE。 Javascript的一些门徒也考虑使用三元作为主要的SIN。所以要小心使用它们,因为hell可能等着你,所以福音就这样了。
你可以像这样使用switch
1 :
switch (true) {
case (parseInt(charCode) >= 65 && parseInt(charCode) <=90): //UPPERCASE
alert("UP");
break;
case (parseInt(charCode) >= 97 && parseInt(charCode) <=122): //LOWERCASE
alert("LO");
break;
case (parseInt(charCode) >= 48 && parseInt(charCode) <=57): //NNUMBERS
alert("NUM");
break;
default: break
}
它非常笨重。如果您从parseInt
派生charCode
,则不必使用event.keyCode
。如果您需要使用parseInt
,请不要忘记提供radix,或者更好的是,使用Number
转换为数字。
无论如何使用ternary是替代方案:
alert( charCode >= 65 && charCode <= 90
? 'UP'
: charCode >= 97 && charCode <= 122
? 'LO'
: charCode >= 48 && charCode <= 57
? 'NUM'
: 'OTHER'
);
[ 编辑 ]让我们看看以下替代方案是否可以满足Javascript Coders教会......
另一种方法是使用RegExp
来自keyCode
:
var chr = String.fromCharCode(charCode),
alertval = /[a-z]/.test(chr) ? 'LO'
: /[A-Z]/.test(chr) ? 'UP'
: /[0-9]/.test(chr) ? 'NUM'
: 'OTHER';
alert(alertval);
作为最后一种选择(男人,javascript是所以多才多艺!)我现在:
var check = String.fromCharCode(charCode)
.replace(/([a-z])|([A-Z])|([0-9])|(.+)/,
function(a,b,c,d) {
return b ? 'LO' : c ? 'UP' : d ? 'NUM' : 'OTH';
});
关于'技巧'的
答案 2 :(得分:1)
你不应该认为关于Javascript的假设使用ASCII字符表(它不使用UTF8吗?),所以代替数值比较,只需使用字符(字符串)值比较。 你不应该以这样的方式使用switch语句:在你的例子中,它执行parseInt(charCode)(应该是一个整数)和布尔表达式值之间的(值和类型,“===”)比较由您的案例陈述返回。 使用和IF链,如下(假设charCode仍然是一个字符串值):
if (charCode >= 'A' && charCode <='Z') { //UPPERCASE
alert("UP");
} else if (charCode >= 'a' && charCode <='z') { //LOWERCASE
alert("LO");
break;
} else if (charCode >= '0' && charCode <='9'): //NNUMBERS
alert("NUM");
}
对于char的ASCII数值,使用Javascript“asc”函数,所以如果你的charcode来自一个键事件,你可以使用inverse,chr(keyCode)函数来获取一个字符串(字符) )已经数字键码的值。 我希望它有用:)
答案 3 :(得分:0)
这里不要使用switch - 语法不正确,charCode是一个int,所以不需要parseInt它
if (charCode >= 65 && charCode <=90) //UPPERCASE
alert("UP");
else if (charCode >= 97 && charCode <=122) //LOWERCASE
alert("LO");
else if (charCode >= 48 && charCode <=57) // NUMBERS
alert("NUM");
更新:怎么样 fromCharCode
var char = String.fromCharCode(charCode)
if (/[a-z]/.test(char)) alert("Lower");
else if (/[A-Z]/.test(char)) alert("Upper");
else if (/[0-9]/.test(char)) alert("Numbers");
http://jsfiddle.net/mplungjan/v65Xc/
我相信有人可以把它放在一个对象中或使用原型:)
答案 4 :(得分:0)
请访问此网站以获取与您的问题相关的功能和解释。对不起,他们都没有考虑到与'ï'或'ö'等非ascii字符有关的问题 http://javascript.about.com/library/blvalid02.htm