在IE中使用大写字符限制对特定正则表达式的输入

时间:2010-04-06 10:24:07

标签: javascript jquery regex validation

我正在尝试使用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则不支持。那么,我可以测试用户是否输入大写或小写字符? 谢谢你的帮助!

3 个答案:

答案 0 :(得分:2)

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

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

自编辑以来 - 您需要使用e.which代替e.charCode

答案 1 :(得分:1)

也可以使用e.which代替e.charCode

答案 2 :(得分:1)

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