防止用户插入*

时间:2012-06-21 02:47:25

标签: javascript html

我试图阻止用户在文本框中插入* 这是我试图做的,但在这里它只检测*如果这是唯一插入的字符。例如:*等文本 当允许的字符与*混合时,它无法检测到它。例如输入,例如:* hjh等。
也许如何使它只用“”代替*而不是整个领域?

<script type="text/javascript">
    function testField(field) {
        var regExpr = new RegExp("[^*]");
        if(!regExpr.test(field.value)) {
            field.value = "";
        }
    }
</script>

<input type="text" id="searchGamesKeyword" class="searchGamesTextBox"
name="searchGamesKeyword" onblur="testField(this);" />

4 个答案:

答案 0 :(得分:2)

您忘记将正则表达式锚定到字符串的开头和结尾:new RegExp("[^*]")

试试这个:var regExpr = /^[^*]*$/ - 它要求除*之外的任何字符的零个或多个实例锚定在字符串的开头和结尾。如果您想强制除/^[^*]+$/之外的任何字符的一个或多个实例,则+会更好(注意*)。

答案 1 :(得分:1)

<script type="text/javascript">
function testField(field, event) {
    if (event.charCode == 42) {
        event.preventDefault();
    }    
}
</script>

<input type="text" id="searchGamesKeyword" class="searchGamesTextBox"
name="searchGamesKeyword" onkeypress="javascript:testField(this, event);" />​

答案 2 :(得分:1)

这个怎么样:

function testField(field) {
    field.value = field.value.replace(/\*/g,"");
}

如问题所示,从onblur=testField(this)调用它将获取字段的当前值,并用空字符串替换所有星号,并保持所有其他字符不变。因此,例如,"ab*cde*"将成为"abcde"

g末尾的/\*/g是一个标志,表示全局匹配 - 没有此标志,它只会替换第一个匹配。

您的代码无效的原因是,如果字符串中的任何位置都有非星号字符,则[^*]的正则表达式将匹配(即,从.test()返回true)。

答案 3 :(得分:0)

这可以防止人们输入*并将其复制并粘贴到。请记得检查后端,因为人们可能在浏览器中禁用了JS。

使用Javascript:

function testField(f)
{
    var o='',i,v=f.value;
    for(i=0;i<v.length;i++) if(v[i]!='*')o+=v[i];
    f.value=o;
}

HTML:

<input type="text" id="searchGamesKeyword" class="searchGamesTextBox" name="searchGamesKeyword" onkeyup="testField(this);" onchange="testField(this);" />

DEMO:http://jsfiddle.net/martinschaer/Sbg6w/(手动优化和缩小;))

编辑: 使用标记(c),如果您尝试编辑到目前为止输入的内容,则可以避免将插入符号放在最后。像这样:

function testField(f)
{
    var t,c,i=0,o='',x="value",v=f[x],l=v.length;
    while(i<l){t=v[i++];if(t!='*')o+=t;else c=1}
    if(c)f[x]=o
}

在此测试:http://jsfiddle.net/martinschaer/Sbg6w/