如何在此验证功能中添加字符?

时间:2010-09-07 23:38:11

标签: javascript jquery validation

$(function(){
    $('input[name="username"]').keydown(function(key){
        if (jQuery.inArray(key.keyCode, 
            [8,37,39,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90])
             == -1 || key.shiftKey ){
                return false;
        }
    });
});

这样做是对文本字符的Ajax验证,它只允许我输入来自a-z0-9的字母,而不是任何其他字符,但我希望它允许我{{1也是(下划线)字符。

4 个答案:

答案 0 :(得分:3)

$('input[name="username"]').keypress(function(event) {
  var k = event.which;
  /* 0:      non-input keys
     8:      backspace
     48-57:  0-9
     97-122: a-z
     95:     _ */
  if (k != 0 && k != 8 && k != 95 &&
      (k < 48 || k > 57) && (k < 97 || k > 122))
    return false;
});

$('input[name="username"]').keyup(function() {
  var inp = $(this).val();

  if (inp.match(/[^a-z0-9_]/g))
    $(this).val(inp.replace(/[^a-z0-9_]/g, ''));
});

keypress事件处理程序在输入字段之前尝试捕获无效字符,以防止在显示无效字符和{{1}时出现分散注意力的“跳跃”效果被删除了。请注意,keyup包含由jQuery标准化的字符代码。

keyup处理程序是捕获使用 Ctrl-V 输入的字符所必需的(请注意,遗憾的是它没有使用菜单选项Edit&gt; Paste来捕获输入)。额外的测试是必要的,以阻止输入字段在每event.which之后返回其最左侧位置(由更改其值引起)。现在它只会在有东西被移除时重置它的位置。

您可以在JSBin上进行测试。

答案 1 :(得分:2)

稍微更易读的方法是

$('input[name="username"]').keydown(function() {
    $(this).val($(this).val().replace(/[^a-zA-Z0-9_]/g, ''));
});

另请注意,验证keydown事件不会阻止某人使用鼠标复制/粘贴任何txt。

答案 2 :(得分:0)

检查keyCode和shiftKey:

(key.shiftKey && key.keyCode == 109)

正如其他人所说,如果您需要在客户端进行严格的验证,那么您需要做的不仅仅是处理keydown事件。

答案 3 :(得分:0)

将代码27添加到数组中?