0

我试图阻止用户在文本框中插入 *。
这是我试图做的,但在这里它只检测 * 如果这是唯一插入的字符。例如:*等文本。
当允许的字符与*混合时,它无法检测到它。例如输入,如:*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

4 回答 4

2

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

试试这个:var regExpr = /^[^*]*$/-- 它要求任何字符的零个或多个实例,除了*锚定在字符串的开头和结尾。如果您/^[^*]+$/+强制除*.

于 2012-06-21T02:51:48.990 回答
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);" />​
于 2012-06-21T02:54:30.343 回答
1

这个怎么样:

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

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

g末尾是一个标志,/\*/g意思是全局匹配 - 如果没有这个标志,它只会替换第一个匹配项。

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

于 2012-06-21T03:13:17.180 回答
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);" />

演示: 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/

于 2012-06-21T03:33:27.110 回答