仅接受不在JavaScript中工作的数字和字母代码

仅接受不在JavaScript中工作的数字和字母代码,javascript,Javascript,我试图阻止用户输入除数字和字母以外的任何内容,但我的代码本身甚至不允许输入数字和字母。原因可能是什么?以下是我的代码片段: $(document).ready(function(){ $("#txtuname").keypress(function(e){ var validExp = /^[0-9a-z]+$/gi; var val = $(this).val(); if(val.match(validExp)) {

我试图阻止用户输入除数字和字母以外的任何内容,但我的代码本身甚至不允许输入数字和字母。原因可能是什么?以下是我的代码片段:

$(document).ready(function(){
    $("#txtuname").keypress(function(e){ 
        var validExp = /^[0-9a-z]+$/gi;
        var val = $(this).val();
        if(val.match(validExp))
        {
            $("#errmsg").html("");
            return true;
        }
        else
        {
            $("#errmsg").html("Number and letters Only"); 
            return false;
        }
    });
});


<input type="text" name="txtuname" id="txtuname" />
<span id="errmsg"></span>
$(文档).ready(函数(){
$(“#txtName”).keypress(函数(e){
var validExp=/^[0-9a-z]+$/gi;
var val=$(this.val();
如果(val.match(validExp))
{
$(“#errmsg”).html(“”);
返回true;
}
其他的
{
$(“#errmsg”).html(“仅限数字和字母”);
返回false;
}
});
});

这是因为按键事件是在将新字符添加到元素值之前触发的(因此,第一个按键事件是在添加第一个字符之前触发的,而值仍然为空)。您应该改用keyup,它是在添加角色后激发的

这是密码

html


您可以使用
keyup
而不是
keypress

$(文档).ready(函数(){
$(“#txtName”).keyup(函数(e){
var validExp=/^[0-9a-z]+$/gi;
var val=$(this.val();
如果(val.match(validExp))
{
$(“#errmsg”).html(“”);
返回true;
}
其他的
{
$(“#errmsg”).html(“仅限数字和字母”);
返回false;
}
});
});

您的问题是,您没有获得正在按下的键的值。如果像这样设置
val
变量,它将按预期工作

var val = String.fromCharCode(e.keyCode)

这将获取按下键的ASCII码,然后将其转换为所代表的字母或数字。然后你可以检查你的正则表达式

您可以将
输入
事件替换为
按键
事件;将
RegExp
调整为
/[0-9a-z]/i
,使用
.split()
参数
数组.prototype.each()
RegExp.prototype.test()
检查
条件下输入值的每个字符;如果每个字符都是数字或字母,则条件为
true
,否则
false
使用
.replace()
替换为
RegExp
/[^0-9a-z]/ig

$(文档).ready(函数(){
var validExp=/[0-9a-z]/i;
$(“#txtName”)。在(“输入”,函数(e){
var val=该值;
var check=val.split(“”).every(函数(值){
返回有效性测试(值)
});
如果(检查){
$(“#errmsg”).html(“”);
退货检查;
}否则{
this.value=val.replace(/[^0-9a-z]/ig,”);
$(“#errmsg”).html(“仅限数字和字母”);
返回false;
}
});
});

$(文档).ready(函数(){
$(“#txtName”).keyup(函数(e){
var validExp=/^[0-9a-z]+$/gi;
var val=$(this.val();
if(有效性检验(val))
{
$(“#errmsg”).html(“”);
返回true;
}
其他的
{
//在此处固定输入字段的值
$(此).val(“”);
$(“#errmsg”).html(“仅限数字和字母”);
返回false;
}
});
});


使用HTML5模式istead。最好调试代码并使用您获得的值发布…@Nasir:不,不是所有顶级浏览器的所有版本都支持它。@AlexeiLevenkov:您看不到JSFIDLE上的演示吗。它会告诉你我在本地看到了什么?本质上你是在说“我太懒了,不能在帖子中提供有用的信息-处理它”-这不是处理帖子的最佳方式。尽管有警告,输入框中仍然会显示禁用字符。因此,您将希望使用
keydown
,而不是
keydup
,无论您使用的是keydup还是keydown,您的解决方案都存在缺陷;其实并不重要。你可能想突出显示实际答案(
keyup
),并按照@AlexeiLevenkov的建议提及
paste
,请参阅更新帖子<代码>输入
事件处理
element@AlexeiLevenkov重读问题。必须已错过应从输入中删除的字符。添加了对
.replace()
的调用,以替换非a-z0-9的字符,但这些字符不起作用。我已经在其他人的解决方案中对此进行了评论。这家伙已经给出了最有效的答案。这是一件简单而重要的事情,它确实起作用。
$(document).ready(function(){
    $("#txtuname").keyup(function(e){ 
        var validExp = /^[0-9a-z]+$/gi;
        var val = $(this).val();
        if(val.match(validExp))
        {
            $("#errmsg").html("");
            return true;
        }
        else
        {
            $("#errmsg").html("Number and letters Only"); 
            return false;
        }
    });
});
var val = String.fromCharCode(e.keyCode)
$(document).ready(function () {

        $("#txtuname").keypress(function (e) {

            var validExp = /^[0-9a-z]+$/gi;

            if (validExp.test(e.key)) {
                $("#errmsg").html("");
                return true;
            }
            else {
                $("#errmsg").html("Number and letters Only");

                return false;
            }
        });
    });