尝试使用jQuery从文本框中删除非数字字符

3

我正在尝试在输入时删除一个字符以测试它是否为数字,如果是数字,则保留它,如果不是,则删除它。它可能多于一个数字。例如,我输入一个“d”,它应该从文本框中删除。然后我输入了一个“1”,它应该保留在文本框中。然后我输入了一个“4”,它也应该保留,所以文本框现在显示“14”。然后我输入了一个“g”,它应该被删除。然后我输入一个“5”,现在文本框显示145。这是我目前的代码。

   $("#txtTestNumbersOnlyRegex").keyup(function () {

            $("#txtTestNumbersOnlyRegex").val(function (index, value) {
                var keyPressed = value.substr(0, value.length - 1);
                var regEx = new RegExp("/^5$/");
                if(!regEx.test(keyPressed)) {
                    alert("true");
                    return value.substr(0, value.length - 1);
                }                   
            });      

        });            

使用keypress可以拦截输入的值并决定接下来的操作,因此最好使用它,否则你的文本会每次都被替换掉。例如,在输入一半时进行编辑,如果不使用keypress,光标会跳到末尾,因为整个文本都被替换了。 - joyBlanks
3个回答

3
你可以尝试这个:

您可能想尝试这个:

$("#txtTestNumbersOnlyRegex").keyup(function () { 
    var newValue = $(this).val().replace(/[^0-9]/g,'');
    $(this).val(newValue);    
 });  

你可以在这里尝试:https://fiddle.jshell.net/aooh0gkz/

1
你可以拦截输入的值并决定下一步操作,所以最好使用keypress事件,否则你的文本将被不断替换。如果你正在编辑输入框中的值,光标会跳到末尾。

$("#txtTestNumbersOnlyRegex").keypress(function (event) {
    var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
    if((keyCode>=65 && keyCode<=90) || (keyCode>=97 && keyCode<=122))
        return false;
    else return true;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type=text id = txtTestNumbersOnlyRegex />


A-Z = 65-90 和 a-z = 97-122 - joyBlanks

1
你可以使用正则表达式将任何非数字替换为空格,尽管这看起来有点奇怪。
$('input').keyup(function() {
    $(this).val($(this).val().replace(/\D/, ''));
});

完整代码片段:

$('input').keydown(function() {
        console.log($(this).val());
        $(this).val($(this).val().replace(/\D/, ''));
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text">


如果您不关心IE支持,您可以使用input type="number"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接