Javascript验证:阻止特殊字符

时间:2009-05-25 10:30:58

标签: javascript validation

如何限制用户在文本框中输入特殊字符。我只想输入数字和字母(输入/粘贴)。

任何样品?

7 个答案:

答案 0 :(得分:16)

试试这个,这个函数允许使用字母数字和空格:

function alpha(e) {
    var k;
    document.all ? k = e.keyCode : k = e.which;
    return ((k > 64 && k < 91) || (k > 96 && k < 123) || k == 8 || k == 32 || (k >= 48 && k <= 57));
}
你的HTML中的

<input type="text" name="name"  onkeypress="return alpha(event)"/>

答案 1 :(得分:8)

您有两种方法:

  1. 检查“按键”事件。如果用户按下特殊字符键,请将其停在那里
  2. 检查“onblur”事件:当输入元素失去焦点时,验证其内容。如果该值无效,请在该输入框旁边显示一条谨慎的警告。
  3. 我建议采用第二种方法,因为它不那么刺激。还记得检查onpaste。如果您只使用按键,那么我们可以复制并粘贴特殊字符,因此也可以使用onpaste来限制粘贴特殊字符

    此外,我还建议您重新考虑是否确实要阻止用户输入特殊字符。因为很多人的密码都有$,#,@和*。

    我认为这可能是为了防止SQL注入;如果是这样:你处理服务器端的检查更好。或者更好的是,转义值并将它们存储在数据库中。

答案 2 :(得分:7)

对于特殊字符:

var iChars = "!@#$%^&*()+=-[]\\\';,./{}|\":<>?";

for (var i = 0; i < document.formname.fieldname.value.length; i++) {
    if (iChars.indexOf(document.formname.fieldname.value.charAt(i)) != -1) {
        alert ("Your username has special characters. \nThese are not allowed.\n Please remove them and try again.");
        return false;
    }
}

答案 3 :(得分:3)

答案 4 :(得分:2)

它会帮助你......假设你有一个带有“formname”形式的表单和一个带有“txt”名称的文本框。然后您可以使用以下代码仅允许使用aphanumeric值

var checkString = document.formname.txt.value;
if (checkString != "") {
    if ( /[^A-Za-z\d]/.test(checkString)) {
        alert("Please enter only letter and numeric characters");
        document.formname.txt.focus();
        return (false);
    }
}

答案 5 :(得分:2)

我认为检查keypress事件并不完全足够,因为我相信用户可以复制/粘贴到输入框而不会触发按键。

所以onblur可能更可靠(但不那么直接)。

要真正确保您不想要的字符不会输入输入框(或textareas等),我认为您需要

  1. 检查keypress(如果您想立即提供反馈)和
  2. 还要检查onblur
  3. 以及验证服务器上的输入(这是确保没有任何不需要的东西进入您的数据的唯一真正方法)。
  4. 其他答案中的代码示例可以正常进行客户端检查(只是不依赖于检查keypress事件),但正如在接受的答案,确实需要进行服务器端检查。

答案 6 :(得分:0)

从今天起不推荐使用某些选项。所以要小心那些。

如果您尝试<input onkeypress="blockSpecialCharacters(event)" />,则类似WebStorm的IDE会削减事件并告诉您:

  

使用了不赞成使用的符号,请向文档咨询以寻求更好的替代方法

然后,当您使用JavaScript时,console.log(e.keyCode)还将给出 keyCode 并说:

  

使用了不赞成使用的符号,请向文档咨询以寻求更好的替代方法

无论如何,我都是使用jQuery完成的。

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.js"></script>

<input id="theInput" />

<script>
    function blockSpecialCharacters(e) {
            let key = e.key;
            let keyCharCode = key.charCodeAt(0);

            // 0-9
            if(keyCharCode >= 48 && keyCharCode <= 57) {
                return key;
            }
            // A-Z
            if(keyCharCode >= 65 && keyCharCode <= 90) {
                return key;
            }
            // a-z
            if(keyCharCode >= 97 && keyCharCode <= 122) {
                return key;
            }

            return false;
    }

    $('#theInput').keypress(function(e) {
        blockSpecialCharacters(e);
    });
</script>