仅接受不在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;
}
});
});