2012-11-05 61 views
2

我有一个正则表达式,将与用户的按键匹配。我很坚持。如何防止用户使用jQuery在文本框中输入特定字符?

这里是我当前的代码:

<script type="text/javascript"> 
    $('input.alpha[$id=tb1]').keydown(function (e) { 
     //var k = e.which; 
     //var g = e.KeyCode; 
     var k = $(this).val(); 
     //var c = String.fromCharCode(e.which); 
     if (k.value.match(/[^a-zA-Z0-9 ]/g)) { 
      e.preventDefault(); 
     } 
    }); 
</script> 

这里的目的是为了防止用户输入是正则表达式中的字符。

先生/女士您的回答会有很大的帮助。谢谢。

+2

“这里是IE9的错误信息。”:在哪里? –

+0

为什么'k.value',当'k = $(this).val()'?你检查过重复吗?我确信在SO上有很多类似的问题。请参阅[this](http://stackoverflow.com/q/2919898/944681),[this](http://stackoverflow.com/q/7543059/944681),[this](http://stackoverflow.com/q/2500620/944681)以及更多.. –

+0

我一直在调整代码,这就是为什么它有点混乱。我想要做的是,如果用户在键盘上按下了一个字符,并且它匹配正则表达式,它将防止默认值。 –

回答

3

尝试使用fromCharCode方法:

$(document).ready(function() { 
    $('#tb1').keydown(function (e) { 

    var k = String.fromCharCode(e.which); 

    if (k.match(/[^a-zA-Z0-9]/g)) 
     e.preventDefault(); 
    }); 
}); 
+0

只有一个这个问题。它也会阻止退格键。 –

+0

@ MichaelS.Miller如果你想保留退格空间,只需在正则表达式中加'\ x08':'/ [^ a-zA-Z0-9 \ x08]/g'。 – Korikulum

2

您使用keypress而不是​​并阻止默认操作。

例如,这防止键入w到文本输入:

$("#target").keypress(function(e) { 
    if (e.which === 119) { // 'w' 
    e.preventDefault(); 
    } 
}); 

Live Copy | Source

更新:如果它是应用该传给你的麻烦正则表达式:

$("#target").keypress(function(e) { 
    if (String.fromCharCode(e.which).match(/[^A-Za-z0-9 ]/)) { 
    e.preventDefault(); 
    } 
}); 

Live Copy | Source

相关问题