jQuery替换无效字符

时间:2014-05-29 12:13:37

标签: javascript jquery

我有输入(type =密码),我只对某些字符限制此输入。代码在这里

 $(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;
  });
});

如果我粘贴无效代码(例如“ř”)获取警报(进入....)。它是正确的。如果我想输入下一个字符,我会再次收到警报。

我觉得这对用户来说很讨厌。更好的修改(根据我) - 如果我输入了无效字符,我会收到警报 - 确认确定无效字符将被删除。

可以知道它是做什么的吗?感谢

P.s。:抱歉我的英文。

3 个答案:

答案 0 :(得分:1)

尝试此操作删除最后一个字符:

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

并将其放在return false;

之前

答案 1 :(得分:1)

这应该做你期望的事情:

$(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

答案 2 :(得分:-1)

您的代码中存在相当多的错误(绑定在没有侦听器的情况下调用一次,new_char是一个全局变量)并且实际上无法清除密码错误时应该发生的无效值。

试试这个。

 $(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;
    }

  });
});