Shruti
Shruti

Reputation: 186

How to avoid entering special characters in JavaScript

On html I have one input box in which I just want to enter numeric values. I used following function:

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();

            }
}

This code works fine. But when I am pressing shift key+ any number from keyboard then special character gets entered. Can anyone tell me how to solve this issue?

Upvotes: 3

Views: 12339

Answers (4)

Mr_Green
Mr_Green

Reputation: 41832

Try this:

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

Add or remove the special characters from the above code to make it as you need.

Upvotes: 0

Pradeep
Pradeep

Reputation: 116

shiftKey event attribute returns a Boolean value that indicates whether or not the "SHIFT" key was pressed

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

so you can exit from your function if shift is pressed using value of event.shiftKey

// 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();
    }
}

Upvotes: 0

Rahul Tripathi
Rahul Tripathi

Reputation: 172458

Try like 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

Upvotes: 1

MusicLovingIndianGirl
MusicLovingIndianGirl

Reputation: 5947

Try the following function

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;
}

If you are using HTML5 just try

<input type="number">

Upvotes: 3

Related Questions