【问题标题】:How to avoid entering special characters in JavaScript如何避免在 JavaScript 中输入特殊字符
【发布时间】:2014-03-26 07:17:36
【问题描述】:

在 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 时,会输入特殊字符。谁能告诉我如何解决这个问题?

【问题讨论】:

  • 尝试使用html5模式属性
  • 对于 HTML 5,使用 type="number"

标签: javascript


【解决方案1】:

试试下面的功能

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">

【讨论】:

  • 谢谢艾西瓦娅。你的代码帮助我解决了我的问题。我将您的代码修改如下:function isNumber(evt) { evt = (evt) ? evt : window.event; var charCode = (evt.which) ? evt.which : evt.keyCode; if (charCode &gt; 31 &amp;&amp; charCode != 44 &amp;&amp; charCode != 46 &amp;&amp;(charCode &lt; 48 || charCode &gt; 57)) { return false; } return true; }
【解决方案2】:

试试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

【讨论】:

  • 前两行可以缩短为var k = document.all?e.keyCode: e.which;或只是var k = e.keyCode || e.which
  • 谢谢,但这不包括数字键盘上的特殊字符。
【解决方案3】:

shiftKey 事件属性返回一个布尔值,指示是否按下了“SHIFT”键

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

【讨论】:

    【解决方案4】:

    试试这个:

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

    在上面的代码中添加或删除特殊字符,使其符合您的需要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-31
      相关资源
      最近更新 更多