【问题标题】:Allowing only Alphanumeric values [duplicate]仅允许字母数字值[重复]
【发布时间】:2012-11-05 16:52:47
【问题描述】:

可能重复:
How to prevent users from entering invalid characters inside an input field

我在一个页面上有 3 个文本框。其中一个应该允许数字,其他字母和第三个数字或字母。

由于这是唯一的要求,我不想使用验证插件或任何其他 3rd 方插件。如何通过使用纯 jQuery 创建自己的插件来做到这一点?

这就是我所做的,但我感觉代码会变得太长

 $(this).keydown(function(e)
        {
            var key = e.charCode || e.keyCode || 0;            
            return (
                key == 8 || 
                key == 9 ||
                key == 46 ||
                (key >= 37 && key <= 40) ||
                (key >= 48 && key <= 57) ||
                (key >= 96 && key <= 105));
        });

http://jsfiddle.net/Cvus8/

谁能告诉我解决这个问题的最佳方法是什么?

【问题讨论】:

  • 正则表达式可以作为最小化代码大小的一个选项,但您必须深入挖掘。
  • 别忘了用户也可以从剪贴板粘贴文本,以及字符集的区域设置差异。
  • 那我该如何处理剪贴板场景呢?

标签: jquery


【解决方案1】:

更好的解决方案可能是使用基于正则表达式的检查。下面的示例将仅限制 ID 为 text 的字段中的字母数字字符:

$('#text').keypress(function (e) {
    var regex = new RegExp("^[a-zA-Z0-9]+$");
    var str = String.fromCharCode(!e.charCode ? e.which : e.charCode);
    if (regex.test(str)) {
        return true;
    }

    e.preventDefault();
    return false;
});

【讨论】:

  • 这不适用于!@#$%^&*()等符号
  • @CountMurphy 答案中的正则表达式旨在仅允许大写/小写字母和数字。它不允许设计符号。如果需要符号,可以扩展正则表达式以包含这些。
  • 看起来我在测试代码中犯了一个错误。上面提到的符号出现在我的文本框中。我的错误,您的解决方案有效。
  • @Kami 这仍然允许^´ 作为输入。我该如何解决?
  • 它的代码不允许删除棒
【解决方案2】:

1-9 范围内的数字后跟零个或多个其他数字:

^[1-9]\d*$

确保字符串仅包含 (ASCII) 字母数字字符、下划线和空格

^[\w ]+$

只有字母没有空格或_

^[a-zA-Z]+$

要匹配仅包含这些字符(或空字符串)的字符串,请尝试

^[a-zA-Z0-9_]*$

一些模式可能会有所帮助..但我认为您必须根据需要对其进行修改..希望对您有所帮助..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 2014-04-11
    相关资源
    最近更新 更多