使用正则表达式匹配特定数字的Javascript

Ren*_*oek 1 javascript regex

我使用javascript来检测特定的键击,在编写方法时,我认为我会尝试使用正则表达式和test()方法,并提出:

if (/8|9|37|38|46|47|48|49|50|51|52|53|54|55|56|57|96|97|98|99|100|101|102|103|104|105|110/.test(num)) {
    // do something if there's a match
}
Run Code Online (Sandbox Code Playgroud)

这似乎没有100%工作,因为有些值似乎使它超过了正则表达式测试,例如83.我已经继续前进,但我仍然很好奇为什么这不起作用.

SLa*_*aks 6

这是完全错误的做法.

要回答这个问题,正则表达式匹配你的字符串的一部分.字符串83通过匹配来传递8.
你需要通过放置^(开头和)$结尾来锚定你的正则表达式.

执行此操作的正确方法是创建有效数字数组,并使用比较parseInt.

例如:

var validNumbers = [ 8, 9, 37, 38, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 110 ];

if (validNumbers.indexOf(parseInt(num, 10)) >=0 ) {
    //Match
}
Run Code Online (Sandbox Code Playgroud)

你需要indexOfIE 的功能:

if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function(needle) {
        for(var i = 0; i < this.length; i++) {
            if(this[i] === needle) {
                return i;
            }
        }
        return -1;
    };
}
Run Code Online (Sandbox Code Playgroud)