【问题标题】:Limiting input to specified regexp with uppercase chars in IE在 IE 中使用大写字符将输入限制为指定的正则表达式
【发布时间】:2010-04-06 10:24:06
【问题描述】:

我正在尝试限制我们的用户可以使用 javascript/jquery 输入的内容。

问题是,我必须将其限制为仅大写字符和数字。

这是我之前编写的代码:

$(input).keypress(function(e){
                    if ($(input).attr("class")=="populationReference"){
                        var ValidPattern = /^[A-Z_0-9]*$/;
                        var char = String.fromCharCode(e.charCode);
                        if (!ValidPattern.test(char) && e.charCode!=0){
                            return false;
                            e.preventDefault();
                        }
                    }
                });

如果 Firefox 支持 charCode,则 IE 不支持。那么,我如何测试用户输入的是大写字符还是小写字符? 感谢您的帮助!

【问题讨论】:

    标签: javascript jquery regex validation


    【解决方案1】:

    请改用keypress() 事件。在 IE 中,所有keydownkeyup 都指定按下了哪个键盘键码——它不考虑控制键并相应地修改键码。 keypress 事件指定输入了哪个字符代码。请注意,它不适用于某些系统键:

    从 Microsoft Internet Explorer 4.0 开始,onkeypress 事件会触发并且可以为以下键取消:
    • 字母:A - Z(大写和小写)
    • 数字:0 - 9
    • 符号:! @ # $ % ^ & * ( ) _ - + = 系统:ESC、空格键、ENTER

    由于您的编辑 - 您需要使用 e.which 而不是 e.charCode

    【讨论】:

      【解决方案2】:

      来自keypress() 的 jquery 手册:

      确定是哪个字符 输入,我们可以检查事件 传递给处理程序的对象 功能。虽然浏览器使用不同 存储此信息的属性, jQuery 规范化 .which 属性 所以我们可以可靠地使用它来检索 字符代码。

      换句话说,如果您使用的是 jquery,则可以安全地使用 e.which 返回字符代码,因此在您的情况下:

      var char = String.fromCharCode(e.which);
      

      是要做出的改变。

      但就个人而言,我会通过为用户转换小写输入来避免惩罚用户。也许添加这个修改:

      $("input.populationReference").keypress(function(e){
                              var ValidPattern = /^[A-Z_a-z_0-9]*$/;
                              var char = String.fromCharCode(e.charCode);
                              if (!ValidPattern.test(char) && e.charCode!=0){
                                  return false;
                                  e.preventDefault();
                              } else {
                                var inputval = $(this).value(); 
                                $(this).value(inputval.toUpperCase());
                              }
                      });
      

      【讨论】:

      • 这成功了。还有一个问题:TAB 和 ARROW 键呢?使用上面的代码,它们都不起作用。有什么办法可以特殊对待吗?
      【解决方案3】:

      也使用e.which 代替e.charCode

      【讨论】:

        猜你喜欢
        • 2018-06-22
        • 1970-01-01
        • 2013-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-05
        • 1970-01-01
        相关资源
        最近更新 更多