我从以前的开发人员那里收到了 PHP/JS 代码,我需要在手机号码字段中添加号码验证。我已经有了 HTML 验证,但我需要补充一点,如果有人按下了无效的键,它不会被显示,只是为了稍后以红色突出显示该字段,因为它包含无效的输入。
我见过许多正则表达式的使用并尝试过,但它们对我需要的有一个非此即彼的效果:如果输入了字母或特殊字符,则不接受也不显示,所有其他输入(数字、键)被接受(我需要根本不显示无效字符,不显示然后擦除)。现在最有效的正则表达式是这样的:
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();
}
当我使用注释的 regex1(IF 条件反转)时,它自然将输入限制为仅数字,从而阻止了所有键,例如 Delete、BackSpace 等。使用 regex2 时,我仍然无法按 Delete 或数字键盘中的数字.
所以我的问题是,上面的代码是否可以修改为只接受数字但也允许键?另一个重要的一点是,我需要一种不对这些键使用键码(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; }
});
}
谢谢。