Allow numbers and minus sign only
我只允许在
1 | /\D/ |
当我加负号时,它似乎不起作用:
1 | /-?\D/ |
(为什么我有问号(?)因为不会总是有负号。)当我尝试向文本字段添加负号时,它不起作用。代码如下:
(我试图添加一个代码片段,但它无法正确编译。)
科德森
1 2 3 4 5 6 7 8 9 | <input id="num" type="text" /> var input = document.getElementById('num'); input.addEventListener("keypress", function(e) { var keycode = (e.keyCode ? e.keyCode : e.which); if (/-?\D/.test(String.fromCharCode(keycode))) { // a non–digit was entered e.preventDefault(); } }); |
我建议使用此regex来匹配有效的数字:
1 | /^[+-]?\d+$/ |
在
1 2 3 4 5 6 7 | var input = document.getElementById('num'); input.addEventListener("change", function(e) { if (!/^[+-]?\d+$/.test(this.value)) { // a non–digit was entered console.log("non-digit was entered"); $('#num').val(''); } }); |
科德森
我认为这个代码只允许你输入数字和减号。但由于代码还允许"ctrl+c"、"ctrl+v"、"ctrl+a"等,文本字段可以通过"ctrl+v"(粘贴)输入其他字符。
如果要同时阻止"ctrl+v"(粘贴),请注释下面的代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | $("#num").on("keydown", function(e){ //character, not with ctrl, alt key if(e.keyCode >= 65 && e.keyCode <= 90 && !e.ctrlKey && !e.altKey) { return false; } // number with shift if(e.keyCode >= 48 && e.keyCode <= 57 && !!e.shiftKey) { return false; } // ` ~ - _ = + \ | [ { ] } '" ; : / ? , < . > var otherKeys = [186, 187, 188, 189, 190, 191, 192, 219, 220, 221, 222]; if(otherKeys.indexOf(e.keyCode) !== -1) { // allow minus sign if(e.keyCode === 189 && !e.shiftKey) { return true; } return false; } // if you want to block"ctrl + v"(paste), comment the below code out //if(e.keyCode === 86 && !!e.ctrlKey) { // return false; //} return true; }); |
尝试将
1 2 3 4 5 6 7 | var input = document.querySelector("input"); input.oninput = function(e) { if (!this.checkValidity()) { // do stuff console.log("invalid input") } } |
1 2 3 | input:invalid + label[for="num"]:before { content:"invalid input"; } |
1 | <input id="num" type="text" pattern="[0-9-]+" minlength="1" placeholder="requires input" required /><label for="num"></label> |
1 2 3 4 5 6 | $("#id").keypress(function(e){ if (e.which != 46 && e.which != 45 && e.which != 46 && !(e.which >= 48 && e.which <= 57)) { return false; } }); |
这对你有帮助
我也有同样的问题,我只想允许数字和一个前导减号,以避免出现像
显然,我希望允许使用箭头键和删除键,并在需要时编辑输入值。
我的jquery 5分钟工作解决方案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | var input = $('input'); var allowed = [ 37, //left arrow 39, //right arrow 8 //delete ]; input.on('keyup', function(e) { if (allowed.indexOf(e.keyCode) !== -1) { return; } //remove white spaces and dots as I want integers var value = $(this).val().trim().replace(/\./g, ''); if (isNaN(value)) { //check negative number validation if (value.substring(0, 1) === '-') { value = value.replace(/\D/g, ''); value = '-' + value; } else { value = value.replace(/\D/g, ''); } } $(this).val(value) }); |
科德森
我注意到的唯一一件事是在Chrome上编辑时,光标在中间插入一个数字后到达值的末尾,在Firefox中不会发生这种情况…
在阅读了所有的建议之后,我希望你考虑一个不同的方法。
原因您的代码现在不允许用户用键盘以任何方式修改已经插入的输入。按退格键或删除键不起作用。箭头不起作用。对于用户来说,这似乎不太舒服。
建议考虑这个例子:
1 2 3 4 5 6 7 8 | var last = ''; var input = document.getElementById('num'); input.addEventListener('input', function(e){ if (isNaN(e.target.value)) e.target.value=last; else last=e.target.value; }); |
科德森
解释挂接到事件输入将允许您查看输入字段的新值。如果它是一个数字(也包括浮点数和负数),可以使用isnan方法进行检查,该方法接受字符串,如果输入不是数字,则返回true,否则返回false。因此,如果条件为真(=不是数字),则用最后一个正确的值替换新值(在本例中,默认值设置为"",但可能类似于
好处显而易见,用户可以使用箭头、退格键、删除键或组合键ctrl+c、ctrl+v,同时保留功能(错误的输入(nan)会立即删除)。
注释如果您想要严格的有符号整数,使用这种方法,如果您在else子句中检测到它,那么您总是可以切断浮点。另外,不仅是考虑。(点,但不是逗号)作为数字的有效部分,它还允许1E3这样的符号。查看此日志了解更多详细信息。
您正在测试
这不能是两个字符。
1 | if (! /-|\d/.test(String.fromCharCode(keycode))) { // a non–digit was entered |
regex
为了在代码示例中使用,匹配的结果将与
当您测试每一个按键时,这仍然允许输入包含
你可能在想
1 | /^-?\d+$/ |