[英]javascript limit text input characters
我想将文本框的输入字符限制为[a-z0-9_-]。 但是,无论何时执行此操作,如退格键和箭头键都不会起作用。 我在本网站和其他网站上发现了一些尝试,但是它们在所有浏览器上均无法正常运行,或者使用黑名单。 例如, W3Schools网站示例将黑名单列出来。 有没有一种方法可以使用白名单(上面的那个)并且仍然允许像退格键,箭头,home,end等键? 还是我必须添加与我要允许的键匹配的每个键代码? 我做这样的事情(为简单起见,将其缩短)。
编辑 -添加代码
<input type="text" onkeypress="return checkInput();">
function checkInput(){
return /[a-z0-9_-]/gi.test(String.fromCharCode(window.event.keyCode));
}
谢谢
只需将示例中的正则表达式更改为如下所示:
numcheck = /[^a-z0-9_-]/;
或更妙的是,请避免出现双重否定:
numcheck = /[a-z0-9_-]/;
return numcheck.test(keychar);
然后,您可以查询退格键等的键码,并进行检查:
if (keychar === 8) return true;
...
甚至将它们放在您的正则表达式中:
numcheck = /[a-z0-9_\x08-]/;
您尚未提供任何代码示例,因此很难在响应中进行具体说明,但是,作为一般策略,请尝试以下操作:不要尝试将键入时可以输入的字符列入白名单,请验证输入的内容。每次击键后输入文本框,以确保它仍然包含有效字符。 如果不是,请删除最后输入的字符。
这种方法将允许使用诸如退格键之类的特殊键,同时实现听起来像您真正想要的:文本框中的有效值。
是的,您可以限制字符输入。 例如,创建一个检查正在发生的事情的函数,如果一切正常,则返回true,否则,则返回false:
// return true for 1234567890A-Za-z - _
function InputCheck(e) {
if ((e.shiftKey && e.keyCode == 45) || e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
if (e.which == 45 || e.which == 95 || (e.which >= 65 && e.which <= 90) || (e.which >= 97 && e.which <= 122))
return true;
return false;
}
return true;
}
一旦有了函数,就将其挂钩到输入中(这是jQuery的):
$('#InputID').keypress(InputCheck);
您可以根据需要进行复杂的支票,例如,这将允许使用美元货币值:
function InputCheck(e) {
if ((e.shiftKey && e.keyCode == 45) || e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57) && e.which != 46 && e.which != 36) {
return false;
}
// . = 46
// $ = 36
var text = $(this).val();
// Dollar sign first char only
if (e.which == 36 && text.length != 0) {
return false;
}
// Only one decimal point
if (e.which == 46 && text.indexOf('.') != -1) {
return false;
}
// Only 2 numbers after decimal
if (text.indexOf('.') != -1 && (text.length - text.indexOf('.')) > 2) {
return false;
}
return true;
}
将此代码添加到onkeypress事件。
var code;
document.all ? code = e.keyCode : code = e.which;
return ((code > 64 && code < 91) || (code > 96 && code < 123) || code == 8 || code == 32 || (code >= 48 && code <= 57));
为了与浏览器兼容,您可以添加var k = e.keyCode == 0吗? e.charCode:e.keyCode;
您可以按自己喜欢的任何键,只要不将该值包括在白名单中即可。
inputelement.onkeyup=function(e){
e=e || window.event;
var who=e.target || e.srcElement;
who.value= who.value.replace(/[^\w-]+/g,'');
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.