仅用于数字的Javascript正则表达式接受#$%&;(

仅用于数字的Javascript正则表达式接受#$%&;(,javascript,regex,Javascript,Regex,我正在尝试用javascript正则化一个输入字段。 我要做的是,每当按下一个键,就会调用以下代码: function testPattern(pattern, evt) { // in this case, pattern = "^[0-9]*$" var inputField = evt.getCurrentTarget(); var keyCode = evt.getKeyCode(); var oldValue = inputField.getSubmit


我正在尝试用javascript正则化一个输入字段。 我要做的是,每当按下一个键,就会调用以下代码:

function testPattern(pattern, evt) {
    // in this case, pattern = "^[0-9]*$"
    var inputField = evt.getCurrentTarget();
    var keyCode = evt.getKeyCode();
    var oldValue = inputField.getSubmittedValue();

    // return if keycode is navigation, delete or backspace
    if((keyCode >= 35 && keyCode <= 40) || keyCode == 8 || keyCode == 46){
        return;
    }

    var regExp = new RegExp(pattern);
    var hasMatch = false;

    hasMatch = regExp.test(String.fromCharCode(keyCode));

    if (!hasMatch) {
        inputField.setValue(oldValue);
        evt.cancel();
    }
}

有人知道为什么会发生这种情况吗?

以这种方式使用正则表达式:

/^\d+$/

您的regexp没有问题

问题在于

// return if keycode is navigation, delete or backspace
if((keyCode >= 35 && keyCode <= 40) || keyCode == 8 || keyCode == 46)
    return;
您的问题源于您正在收听的浏览器机具/键盘事件中的keyCode和charCode之间的混淆:


这个问题可能是一个很好的阅读:

限制这个ASCII 35,36,37,38,39,40来限制这些符号,或者您可以使用下面提到的代码

<script type="text/javascript">

    var specialKeys = new Array();
    specialKeys.push(8); //Backspace
    specialKeys.push(9); //Tab
    specialKeys.push(46); //Delete
    specialKeys.push(36); //Home
    specialKeys.push(35); //End
    specialKeys.push(37); //Left
    specialKeys.push(39); //Right

    function IsAlphaNumeric(e) {
        var keyCode = e.keyCode == 0 ? e.charCode : e.keyCode;
        var ret = ((keyCode >= 32 && keyCode <= 32)||(keyCode >= 44 && keyCode <= 44)||(keyCode >= 46 && keyCode <= 46)||(keyCode >= 48 && keyCode <= 57) || (keyCode >= 65 && keyCode <= 90) || (keyCode >= 97 && keyCode <= 122) || (specialKeys.indexOf(e.keyCode) != -1 && e.charCode != e.keyCode));
        document.getElementById("error").style.display = ret ? "none" : "inline";
        return ret;
    }
</script>

var specialKeys=新数组();
specialKeys.push(8);//退格
特殊键。按(9);//制表符
specialKeys.push(46);//删除
推(36);//回家
特殊键。按(35);//结束
特殊键。按(37);//向左
推(39);//右
函数为对数(e){
var-keyCode=e.keyCode==0?e.charCode:e.keyCode;

变量ret=((keyCode>=32&&keyCode=44&&keyCode=46&&keyCode=48&&keyCode=65&&keyCode=97&&keyCode它仍然会发生..这与我使用的行为完全一样。我认为这是一种非常奇怪的行为..应该忽略箭头导航和字符删除。我认为这将是字符代码。非常感谢你的帮助p!:)
8     backspace
35    #
36    $
37    %
38    &
39    ´
40    (
46    .
<script type="text/javascript">

    var specialKeys = new Array();
    specialKeys.push(8); //Backspace
    specialKeys.push(9); //Tab
    specialKeys.push(46); //Delete
    specialKeys.push(36); //Home
    specialKeys.push(35); //End
    specialKeys.push(37); //Left
    specialKeys.push(39); //Right

    function IsAlphaNumeric(e) {
        var keyCode = e.keyCode == 0 ? e.charCode : e.keyCode;
        var ret = ((keyCode >= 32 && keyCode <= 32)||(keyCode >= 44 && keyCode <= 44)||(keyCode >= 46 && keyCode <= 46)||(keyCode >= 48 && keyCode <= 57) || (keyCode >= 65 && keyCode <= 90) || (keyCode >= 97 && keyCode <= 122) || (specialKeys.indexOf(e.keyCode) != -1 && e.charCode != e.keyCode));
        document.getElementById("error").style.display = ret ? "none" : "inline";
        return ret;
    }
</script>