É a tecla shift pressionada em JavaScript

Eu escrevi uma função JS que permite apenas que números sejam inseridos. Uma cópia dessa função está abaixo:

function NumbersOnly(e) {
    var evt = e || window.event;
    if (evt) {
        var keyCode = evt.charCode || evt.keyCode;
        //Allow tab, backspace and numbers to be pressed, otherwise return false for everything.
        //(keyCode>=96 && keyCode<=105) are the numpad numbers        
        if ((keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105) || keyCode === 9 || keyCode === 8) {


        }
        else {

            evt.returnValue = false;
        }
    }
}

Esta função funciona bem com todos os números, mas o meu problema acontece quando a tecla shift é pressionada e uma das teclas numéricas é pressionada. O valor retornado é um dos caracteres acima dos números. Então, por exemplo, se eu mantiver o shift pressionado e apertar 7, '&' é retornado, mas o keyCode ainda é 55 !! Eu teria esperado que isso fosse diferente.

Então, minha pergunta é como eu verifico se a tecla shift está sendo pressionada. Eu tentei a verificação a seguir, mas isso não funcionou:

    if (keyCode === 16) {
        evt.returnValue = false;
    }
    else {

        if ((keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105) || keyCode === 9 || keyCode === 8) {


        }
        else {

            evt.returnValue = false;
        }
    }

Estou usando o ASP.NET 4.0.

Qualquer ajuda será muito bem recebida.

Desde já, obrigado.

questionAnswers(2)

yourAnswerToTheQuestion