Javascript正则表达式将文本字段限制为仅数字(必须允许不可打印的键)
我从以前的开发人员那里收到了PHP/JS代码,我需要将数字验证添加到手机号码字段中。我已经有了HTML验证,但是我需要补充的是,如果有人按下了无效的键,它不会显示出来,只是在后面用红色突出显示字段,因为它包含无效的输入 我见过许多正则表达式的使用和尝试,但它们有一个非此即彼的效果,我需要的是:如果输入一个字母或特殊字符,不接受和不显示,所有其他输入(数字,键)都被接受(我需要无效字符不显示,不显示,然后删除)。现在最有效的正则表达式是:Javascript正则表达式将文本字段限制为仅数字(必须允许不可打印的键),javascript,jquery,regex,validation,validationrules,Javascript,Jquery,Regex,Validation,Validationrules,我从以前的开发人员那里收到了PHP/JS代码,我需要将数字验证添加到手机号码字段中。我已经有了HTML验证,但是我需要补充的是,如果有人按下了无效的键,它不会显示出来,只是在后面用红色突出显示字段,因为它包含无效的输入 我见过许多正则表达式的使用和尝试,但它们有一个非此即彼的效果,我需要的是:如果输入一个字母或特殊字符,不接受和不显示,所有其他输入(数字,键)都被接受(我需要无效字符不显示,不显示,然后删除)。现在最有效的正则表达式是: function filterNonDigits(evt)
function filterNonDigits(evt)
{
var event = evt || window.event;
var keyentered = event.keyCode || event.which;
keyentered = String.fromCharCode(keyentered);
//var regex1 = /[0-9]|\./;
var regex2 = /^[a-zA-Z.,;:|\\\/~!@#$%^&*_-{}\[\]()`"'<>?\s]+$/;
if( regex2.test(keyentered) ) {
event.returnValue = false;
if(event.preventDefault) event.preventDefault();
}
函数过滤器OnDigits(evt)
{
var事件=evt | | window.event;
var keycentered=event.keyCode | | event.which;
KEYENTERD=字符串。fromCharCode(KEYENTERD);
//变量regex1=/[0-9]\./;
变量regex2=/^[a-zA-Z;::\\\/~!@$%^&*.-{}\[\]()`?\s]+$/;
如果(regex2.test(输入键)){
event.returnValue=false;
if(event.preventDefault)event.preventDefault();
}
当我使用带注释的regex1(IF条件颠倒)时,它自然将输入限制为仅数字,从而防止所有键,如Delete、BackSpace等。当使用regex2时,我仍然无法按Delete或numpad中的数字
所以我的问题是,上面的代码是否可以修改为只接受数字,但也允许按键?另一个重要的问题是,我需要一种不使用按键代码(8、24等)的方法,以确保所有键盘类型都可以使用
最新更新: 因此,我的解决方案如下:如果“oninput”属性存在,我使用Ehtesham提供的解决方案,如果不存在,备份使用Rohan Kumar提供的解决方案。因此如下所示:
if (obj.hasOwnProperty('oninput') || ('oninput' in obj))
{
$('#mobileno').on('input', function (event) {
this.value = this.value.replace(/[^0-9]/g, '');
});
}
else
{
$('#mobileno').on('keypress',function(e){
var deleteCode = 8; var backspaceCode = 46;
var key = e.which;
if ((key>=48 && key<=57) || key === deleteCode || key === backspaceCode || (key>=37 && key<=40) || key===0)
{
character = String.fromCharCode(key);
if( character != '.' && character != '%' && character != '&' && character != '(' && character != '\'' )
{
return true;
}
else { return false; }
}
else { return false; }
});
}
if(obj.hasOwnProperty('oninput')| |('oninput'在obj中))
{
$('#mobileno')。在('input',函数(event){
this.value=this.value.replace(/[^0-9]/g');
});
}
其他的
{
$('mobileno')。on('keypress',函数(e){
var deleteCode=8;var backspaceCode=46;
var-key=e.which;
如果((key>=48&&key=37&&key试一下
CSS
.error{border:1px solid #F00;}
脚本
$('#key').on('keydown',function(e){
var deleteKeyCode = 8;
var backspaceKeyCode = 46;
if ((e.which>=48 && e.which<=57) ||
(e.which>=96 && e.which<=105) || // for num pad numeric keys
e.which === deleteKeyCode || // for delete key,
e.which === backspaceKeyCode) // for backspace
// you can add code for left,right arrow keys
{
$(this).removeClass('error');
return true;
}
else
{
$(this).addClass('error');
return false;
}
});
$('#key')。打开('keydown',函数(e){
var deleteKeyCode=8;
var backspaceKeyCode=46;
如果((e.which>=48&&e.which=96&&e.which而不是检查事件键码,为什么不检查实际输入中的更改,然后过滤掉非数字
这个例子使用了keyup,这样它就可以读取实际输入的内容,这意味着该字符会短暂显示然后删除,但希望你能理解我的要点。它甚至可能会给用户反馈该字符是不允许的。无论哪种方式,我认为这是最简单的设置,如果你需要更多帮助,请告诉我
function filterNonDigits(evt)
{
var event = evt || window.event;
var val = event.target.value;
var filtered = val.replace(/[^0-9]/g, '');
if(filtered !== val) {
event.target.value = filtered;
event.target.className += " error";
}
}
(jquery仅用于轻松绑定keyup函数,您的实际脚本不需要它)一个很好的解决方案如下:
这里最好的方法是使用input
事件来处理您所有的问题。所有现代浏览器都支持它。使用jQuery,您可以执行以下操作。处理所有情况,使用鼠标/键盘退格等粘贴值
$('.numeric').on('input', function (event) {
this.value = this.value.replace(/[^0-9]/g, '');
});
看到了吗
您可以通过检查输入是否具有此属性来检查input
事件是否受支持。如果不支持,您可以对较旧的浏览器使用onkeyup
if (inputElement.hasOwnProperty('oninput')) {
// bind input
} else {
// bind onkeyup
}
/\d/
相当于上述的/[0-9]/
.src:这更简洁了一点
this.value = this.value.replace(/\D/gm, '');
正则表达式包含一个\.
,它在不允许的正则表达式中明确列出。另外,如果原始帖子的问题或标签中没有包含jQuery,通常我不会推荐jQuery解决方案。谢谢你们两位的回复。我确实尝试过这种方法,但被要求找到一种不显示字母的方法,然后删除了它,这让我开始寻找其他方法。jQuery也可以,但我没有包括它,因为我的问题更多的是关于要使用的JS函数。啊,这需要一种不同的方法。你能把它添加到你原来的问题中吗?它可能会阻止人们添加更多不符合你需要的答案。谢谢你的提示。我真的以为我通过提到我不希望显示无效的信件,但我可以看到,如果它显示并被删除,它可以被认为是正常的。我现在将编辑它。感谢您的回复。正如我在上一个回复的评论中提到的,我已经尝试过这种方法,但正是因为这个原因,我正在寻找另一种方法。”角色将短暂显示,然后删除“Result.感谢您在我尝试提供的不同解决方案时对不同问题的帮助:)谢谢你的回复。我使用键盘代码的唯一问题是,如果有人使用的是非美国键盘,某些键可能有不同的键盘代码。我正在查看RegEx以避免这个问题。哦,如果是这样的话,看看这个:。只需使用keypress
事件,而不是keypup/downAh没有想到的(这里是JS和jQuery的新手)。那么在Rohan Kumar提供的代码中用“keypress”替换“keydown”就行了吗?我现在有另一个问题,那就是点、%和&字符的代码与backspace和2个箭头键的代码相同(我允许)所以点、%和-,也被接受。还有一件事是在Mozilla FF中,我根本不能在字段中键入。有什么想法吗?好的FF问题已经解决了,我用了“e.keyCode”而不是“e.which”“哪个FireFox似乎有问题。现在我只是遇到了某些无效字符的问题,这些字符的代码与不可打印的键相同。到目前为止,我注意到的是(%,&,,')。知道如何解决这个问题吗?谢谢。感谢您的回复,这实际上看起来很有希望满足我的需要
this.value = this.value.replace(/\D/gm, '');