如何阻止特殊字符?

时间:2012-03-25 21:54:42

标签: javascript html javascript-events special-characters block

我想在此代码中阻止特殊字符。 换句话说,用户只能输入字母数字值并使用退格键进行删除。

错误:当我在if条件下编写code==8时,它会允许所有特殊字符。

<html>
    <head>
        <title>practice</title>
        <script type="text/javascript">
              function noSpecialChar(e){
                    if (e.keyCode)
                        code = e.keyCode;
                    else if (e.which)
                        code = e.which;

                    //code==8                   => backspace
                    //(code>=65 && code<=90)    => alphabets
                    //(code>=48 && code<=57)      => numeric

                    if((code>=65 && code<=90)||(code>=48&&code<=57)||(code==8)){
                        return true;
                    }else{
                        return false;
                    }
              }

        </script>
    </head>
    <body>
        <input type="text" name="txtName" id="txtName" onkeydown=" return noSpecialChar(window.event);"/>
    </body>
</html>

2 个答案:

答案 0 :(得分:1)

正确进行此类过滤非常棘手。以下示例使用“JavaScript:The Definitive Guide”中的代码,“17.8 Text Events”部分。如果您想使用它,请从O'Reilly服务器下载代码,而不是在代码中直接引用它。该代码使用whenReady.js例程,您可以从https://github.com/kukawski/whenReady/blob/master/whenReady.js

下载该例程
<!doctype html>
<script src="whenReady.js"></script>
<script src=
"http://examples.oreilly.com/9780596805531/examples/17.06.InputFilter.js">   
</script>
<label for="txtName">Text:</label><input id="txtName" type="text"
data-allowed-chars=
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
data-messageid="input-error">
<span id="input-error" style="color:red;visibility:hidden">Alphanumeric
characters only</span>

修改代码可能稍微好一点,以便代替data-属性,它使用pattern属性,即使在禁用JavaScript时,也会在某些浏览器上提供某些功能。作为指定允许字符集的灵活性。但是,您需要有效地实现正则表达式解析器,因此增益可能与所需的工作不对应。

答案 1 :(得分:0)

我有一个允许使用字符的脚本:

考虑你的html:<input type="text" id="yourID"></input>

<script>
        document.getElementById("yourID").onkeypress = function(e) {
        var chr = String.fromCharCode(e.which);
        if ("Which characters are allowed? Type them instead of these, without any seperation".indexOf(chr) < 0)
            return false;
    };
</script>

如果你想只允许字母和数字使用:

<script>
        document.getElementById("yourID").onkeypress = function(e) {
        var chr = String.fromCharCode(e.which);
        if ("1234567890qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM".indexOf(chr) < 0)
            return false;
    };
</script>