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