如何避免在JavaScript中输入特殊字符

时间:2014-03-26 07:17:36

标签: javascript

在html上我有一个输入框,我只想在其中输入数值。我使用了以下功能:

function allowNumbersOnly(event,locale) {
    if(locale=='en' && (event.keyCode==190 || event.keyCode==110)){
        return true;
    }
    else if(locale=='nl' && (event.keyCode==188 || event.keyCode==190 || event.keyCode==110)){
        return true;
    }
    if(event.keyCode==189 || (event.keyCode==109) ){
        return true;
    }
    var key = event.charCode || event.keyCode || 0;

    // allow backspace, tab, delete, arrows, numbers and keypad numbers ONLY
    if (
        key == 8 || 
        key == 9 ||
        key == 46 ||
        (key >= 37 && key <= 40) ||
        (key >= 48 && key <= 57) ||
        (key >= 96 && key <= 105)){

        }else{
             event.preventDefault();

            }
}

此代码工作正常。但是当我从键盘按shift key+ any number时,会输入特殊字符。谁能告诉我如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

尝试以下功能

function isNumber(evt) {
evt = (evt) ? evt : window.event;
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57)) {
    return false;
}
return true;
}

如果您使用 HTML5 ,请尝试

<input type="number">

答案 1 :(得分:1)

尝试this

function blockspecialcharacter(e) {
    var key= document.all ? key= e.keyCode : key= e.which;
    return ((key > 64 && key < 91) || (key> 96 && key< 123) || key== 8 || key== 32 || (key>= 48 && key<= 57));
}

Check demo here

答案 2 :(得分:0)

shiftKey事件属性返回一个布尔值,指示&#34; SHIFT&#34;按下了键

if (event.shiftKey==1)
{
    alert("The shift key was pressed!")
}
else
{
    alert("The shift key was NOT pressed!")
}

因此,如果使用event.shiftKey的值按下shift,则可以退出函数

// in your code
function allowNumbersOnly(event,locale) {
    if (event.shiftKey==1) {
        return false;
    } // RETURN if shift key got clicked.

    if (locale=='en' && (event.keyCode==190 || event.keyCode==110)) {
        return true;
    }
    else if (locale=='nl' && (event.keyCode == 188 ||
                              event.keyCode == 190 ||
                              event.keyCode == 110)) {

        return true;
    }

    if (event.keyCode==189 || (event.keyCode==109)) {
        return true;
    }

    var key = event.charCode || event.keyCode || 0;

    // allow backspace, tab, delete, arrows, numbers and keypad numbers ONLY
    if (key == 8 || 
        key == 9 ||
        key == 46 ||
        (key >= 37 && key <= 40) ||
        (key >= 48 && key <= 57) ||
        (key >= 96 && key <= 105)) {

    }
    else {
        event.preventDefault();
    }
}

答案 3 :(得分:0)

试试这个:

function blockSpecialChars(e){
    var e = e || window.event;
    var k = e.which || e.keyCode;
    var s = String.fromCharCode(k);
    return !/^[\\\"\'\;\:\>\|~`!@#\$%^&*\(\)]$/i.test(s);
}

添加或删除上述代码中的特殊字符,以便根据需要进行设置。