ondra15
ondra15

Reputation: 151

jQuery replace invalid character

I have input (type=password) and I restrict this input only for some characters. Code is here

 $(document).ready(function() {
  $('#nguestpass, #nguestps, #nuserpass, #nuserps, #nadminpass, #nadminps').bind('keyup').bind('keyup', function(){
    new_char = $(this).val();
    if (/[^a-zA-Z0-9\!\@\#\%\*\(\)_\-\+\=\[\]\:\;\'\,\.\?/]/.test( new_char ) === true ) {
       alert('Entred character is not allowed. Please correct it.');
       return false;
    }

    return true;
  });
});

If I paste invalid code (example "ř") get alert (Entered....). It is correct. If I want to enter next characters I get alert again.

I think that is nasty for user. Better modification (according me) - if I entered invalid characters I get alert - confirm OK and invalid character will be remove.

Can any idea what do it? Thanks

P.s.: Sorry for my english.

Upvotes: 0

Views: 580

Answers (3)

GillesC
GillesC

Reputation: 10874

There is quite a few mistake in your code (bind called once without listener, new_char is a global variable) and nothing to actually clear the invalid value which is what should happen when a password is wrong.

Try this.

 $(function() {

  $('#nguestpass, #nguestps, #nuserpass, #nuserps, #nadminpass, #nadminps').bind('keyup', function(){

    var new_char = $(this).val();

    if (/[^a-zA-Z0-9\!\@\#\%\*\(\)_\-\+\=\[\]\:\;\'\,\.\?/]/.test( new_char ) === true ) {
       alert('Entred character is not allowed. Please correct it.');

    // reset value
    $(this).val("");

       return false;
    }

  });
});

Upvotes: -1

emerson.marini
emerson.marini

Reputation: 9348

This should do what you're expecting:

$(function () { // Same as document ready, just shorter.
    // Try to replace all these IDs with a common class you can put on every input.
    // If you're using a not-so-old version of jQuery, use .on() instead of .bind().
    $('#nguestpass, #nguestps, #nuserpass, #nuserps, #nadminpass, #nadminps').on('keyup', function () {
        var new_char = $(this).val();

        if (/[^a-zA-Z0-9\!\@\#\%\*\(\)_\-\+\=\[\]\:\;\'\,\.\?/]/.test(new_char) === true) {
            alert('Entred character is not allowed. Please correct it.');
            $(this).val(new_char.substring(0, new_char.length - 1));
            return false;
        }

        return true;
    });
});

Demo

Upvotes: 1

tjati
tjati

Reputation: 6089

Try this to remove the last character:

$(this).val($(this).val().substring(0,$(this).val().length-1));

and put this before your return false;

Upvotes: 1

Related Questions