Restricting Characters in Input Field to a Set of Characters

前端 未结 3 947
梦如初夏
梦如初夏 2021-01-04 08:53

Question Update: How can I prevent all characters except for the ones specified in a char array from being typed into an input field using AngularJS (or jQu

3条回答
  •  时光取名叫无心
    2021-01-04 09:17

    To 'restrict some characters from being typed in' what comes in my mind is to attach event handlers for 'keyup', 'change', 'paste' events on inputs and when they are triggered to 'clean' their values against your pattern. I implemented the logic as jQuery plugin but you can adapt it to angular, use better naming or whatever you want.

    The plugin:

    $.fn.restrictInputs = function(restrictPattern){
        var targets = $(this);
    
        // The characters inside this pattern are accepted
        // and everything else will be 'cleaned'
        // For example 'ABCdEfGhI5' become 'ABCEGI5'
        var pattern = restrictPattern || 
            /[^0-9A-Z !\\"#$%&'()*+,\-.\/:;<=>?@\[\]^_`{|}~]*/g; // default pattern
    
        var restrictHandler = function(){
            var val = $(this).val();
            var newVal = val.replace(pattern, '');
    
            // This condition is to prevent selection and keyboard navigation issues
            if (val !== newVal) {
                $(this).val(newVal);
            }
        };
    
        targets.on('keyup', restrictHandler);
        targets.on('paste', restrictHandler);
        targets.on('change', restrictHandler);
    };
    

    Usage:

    $('input').restrictInputs();
    
    // Or ...
    
    $('.my-special-inputs-decorated-with-this-class').restrictInputs();
    

    Here is a JsFiddle Demo

    Note: you can try to change the implementation to accept string with forbidden characters instead of regular expression and create the regex dynamically. Also you may find others events which are appropriate for triggering the 'cleaning'.

提交回复
热议问题