将html输入框格式化为仅数字输入 - 正确格式化减号

时间:2018-04-14 15:04:29

标签: javascript html input user-input

我正在尝试格式化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...'> 

1 个答案:

答案 0 :(得分:3)

如果你真的需要输入[type =&#34; text&#34;]我认为正则表达式是你可以使用的最好的。以下正则表达式应该可以工作:

/^-?\d*\.?\d*$/

您可以使用此正则表达式检查每个输入事件的输入值,如下所示:

/^-?\d*\.?\d*$/.test(input.value)

否则你应该使用type="number"作为你的输入元素,就像Andreas评论的那样。

在测试输入后,您应该使用parseFloat来标准化输入,因为正则表达式允许输入像&#34; .2&#34;或&#34; 2。&#34;。