jquery - validate characters on keypress?

前端 未结 7 1300
既然无缘
既然无缘 2020-12-05 10:25

I have a form text field that I want to allow only numbers and letters in. (i.e., no #$!, etc...) Is there a way to throw up an error and prevent the keypress from actuall

相关标签:
7条回答
  • 2020-12-05 10:41

    I found that combining validation on keypress and keyup gives the best results. Key up is a must if you want to handle copy pasted text. It is also a catch all in case of cross browser issues which allow non numeric values into your textbox.

        $("#ZipCode").keypress(function (event) {
    
            var key = event.which || event.keyCode; //use event.which if it's truthy, and default to keyCode otherwise
    
            // Allow: backspace, delete, tab, and enter
            var controlKeys = [8, 9, 13];
            //for mozilla these are arrow keys
            if ($.browser.mozilla) controlKeys = controlKeys.concat([37, 38, 39, 40]);
    
            // Ctrl+ anything or one of the conttrolKeys is valid
            var isControlKey = event.ctrlKey || controlKeys.join(",").match(new RegExp(key));
    
            if (isControlKey) {return;}
    
            // stop current key press if it's not a number
            if (!(48 <= key && key <= 57)) {
                event.preventDefault();
                return;
            }
        });
    
    $('#ZipCode').keyup(function () {
        //to allow decimals,use/[^0-9\.]/g 
        var regex = new RegExp(/[^0-9]/g);
        var containsNonNumeric = this.value.match(regex);
        if (containsNonNumeric)
            this.value = this.value.replace(regex, '');
    });
    
    0 讨论(0)
  • 2020-12-05 10:43

    Well the patrick's answer removes character if it is wrong, to actually prevent character from being inserted into the field use

    $("#field").keypress(function(e) {
        // Check if the value of the input is valid
        if (!valid)
            e.preventDefault();
    });
    

    This way the letter will not come to textarea

    0 讨论(0)
  • 2020-12-05 10:46
    $('input').keyup(function() {
        var $th = $(this);
        $th.val( $th.val().replace(/[^a-zA-Z0-9]/g, function(str) { alert('You typed " ' + str + ' ".\n\nPlease use only letters and numbers.'); return ''; } ) );
    });
    

    EDIT:

    There are some other good answers here that will prevent the input from taking place.

    I've updated mine since you also wanted to show an error. The replace can take a function instead of a string. The function runs and returns a replacement value. I've added an alert to show the error.

    http://jsfiddle.net/ntywf/2/

    0 讨论(0)
  • 2020-12-05 10:46
    $(document).ready(function() {
     $('.ipFilter').keydown((e) => {
        if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 ||
            (e.keyCode === 65 && (e.ctrlKey === true || e.metaKey === true) || 
              e.keyCode === 67 && (e.ctrlKey === true || e.metaKey === true) ||
              e.keyCode === 86 && (e.ctrlKey === true || e.metaKey === true) ||
              e.keyCode === 82 && (e.ctrlKey === true || e.metaKey === true)) || 
            (e.keyCode >= 35 && e.keyCode <= 40 )) {
                 return;
        }
        if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
            e.preventDefault();
        }
      });
    });
    
    0 讨论(0)
  • 2020-12-05 10:57
    $('#yourfield').keydown(function(e) {
        // Check e.keyCode and return false if you want to block the entered character.
    });
    
    0 讨论(0)
  • 2020-12-05 10:58

    The above jquery extension (ForceAlphaNumericOnly) is good but still allows the following characters through !@#$%^&*()

    On my Mac, when you press the shift key (keycode 16) and then 1, it enters ! but the keycode is 49, the keycode for 1.

    0 讨论(0)
提交回复
热议问题