Optimize an IF statement

I would like to make the following statement clearner. I’m thinking something like the SQL “variable IN (value1, value2, value2, etc.)” operator.

Any ideas?

``````if((e.which > 47 && e.which < 58) || (e.which > 95 && e.which < 106) || e.which==8 || e.which == 46 || e.which == 37 || e.which == 39 || e.which == 13) return e.which;
``````

I’m sure there’s a clean mathematical way to do it, but

/^(8|3[79]|13|4[68-9]|5[0-7]|9[6-9]|10[0-5])\$/.test(e.which)

I did find one alternative - not necessarily better, but different:

``````if([8,13,37,39,46,48,49,50,51,52,53,54,55,56,57,96,97,98,99,100,101,102,103,104,105].indexOf(e.which) > -1) return e.which;
``````

Another way is with an object:

``````
var good = {
8: 1,
13: 1,
37: 1,
39: 1,
46: 1,
48: 1,
49: 1,
50: 1,
51: 1,
52: 1,
53: 1,
54: 1,
55: 1,
56: 1,
57: 1,
96: 1,
97: 1,
98: 1,
99: 1,
100: 1,
101: 1,
102: 1,
103: 1,
104: 1,
105: 1
};
return good[e.which];

``````

It’s still really verbose, but depending on how you decided on the acceptable values, that could be worked around.

Not sure how “optimal” it would be (a little, I think), but converting this to a switch may be a bit more readable.