我正在尝试格式化html文本输入框,以便它只接受数值(使用javascript)。这意味着输入只能是数字,减号或点/逗号(无论如何,逗号都会被点替换)。
问题是,如果它不是字符串的第一个字符,则必须防止减号。例如:“ - 30”是有效输入,但“80 ---- 20”不是。有没有人知道如何解决这个问题?
var div = document.getElementById("div");
function inputHandle(event, object){
var input = document.getElementById("value");
var comma = false;
for (i=0; i<input.value.length; i++) {
var array = input.value;
if (input.value[i] == ".") {
comma = true;
}
}
if ((event.keyCode == 13) && (Number(input.value) < Number.MAX_SAFE_INTEGER)) {
object.innerHTML = Number(input.value);
}
if ((event.charCode == 44) && (comma == false)) {
input.value = input.value + ".";
event.preventDefault();
}
if (!((/^-?\d*\.?\d*$/.test(event.key) == true)
|| (((event.charCode == 118) || (event.charCode == 99) || (event.charCode == 97)) && (event.ctrlKey))
|| (event.keyCode == 8)
|| (event.keyCode == 46)
|| (event.keyCode >= 35 && event.keyCode <= 40)
)) {
event.preventDefault();
}
if ((event.charCode == 46) && (comma == true)) {
event.preventDefault();
}
}
<div id="div"></div>
<input type='text' onkeypress='inputHandle(event, div)' accept-charset='ISO-8859-1' id='value' name='coefficientvalue' placeholder='Enter a value...'>
答案 0 :(得分:3)
如果你真的需要输入[type =&#34; text&#34;]我认为正则表达式是你可以使用的最好的。以下正则表达式应该可以工作:
/^-?\d*\.?\d*$/
您可以使用此正则表达式检查每个输入事件的输入值,如下所示:
/^-?\d*\.?\d*$/.test(input.value)
否则你应该使用type="number"
作为你的输入元素,就像Andreas评论的那样。
在测试输入后,您应该使用parseFloat
来标准化输入,因为正则表达式允许输入像&#34; .2&#34;或&#34; 2。&#34;。