使用javascript限制按键上的连续字符

时间:2017-02-24 19:45:05

标签: javascript regex html5

我为公园的信息亭写了这个代码,它适用于html5和javascript

function myFunction() {
    var name = document.getElementById('name').value;
    var nameFilter = /^(?!.*([A-Za-z0-9])\1{2})(?=.*[a-z])(?=.*\d)[A-Za-z0-9]+$/g;        
    if(nameFilter.test(name)) {
      $('#name').keydown(function (e) {
        if (e.keyCode == 8 || e.keyCode == 46) {
          $(this).unbind(e).keypress();
        }
        else {
          e.preventDefault();
          //return false;
        }
          });
    }
};

它应该防止多个连续的字符(展位键盘有点破碎,按键按下它会按下按键的3到5倍)

到目前为止我已经完成了将它限制为两个字符,但是由于preventDefault()它没有做任何事情,我使用了一个unbind来恢复它,但我仍然没有完成任何事情,我需要帮助,无论是通过任何其他

的意思

1 个答案:

答案 0 :(得分:0)

此版本考虑使用shift键大写字母

var nameElement = $('#name');
var wasShiftKeyPressed;
var nameAfterFirstKeyDown;

nameElement.keydown(function(e) {
    wasShiftKeyPressed = e.shiftKey;
    setTimeout(function() {
        nameAfterFirstKeyDown = nameAfterFirstKeyDown ? nameAfterFirstKeyDown : nameElement.val();
    });
})

nameElement.keyup(function() {
    if (wasShiftKeyPressed) {
        wasShiftKeyPressed = false;
        nameAfterFirstKeyDown = nameElement.val(); //Otherwise capitalization only works for first letter
    }
    else {
        nameElement.val(nameAfterFirstKeyDown);
        nameAfterFirstKeyDown = "";
    }
});