小智 153
<HTML>
<HEAD>
<SCRIPT language=Javascript>
<!--
function isNumberKey(evt)
{
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode != 46 && charCode > 31
&& (charCode < 48 || charCode > 57))
return false;
return true;
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<INPUT id="txtChar" onkeypress="return isNumberKey(event)"
type="text" name="txtChar">
</BODY>
</HTML>Run Code Online (Sandbox Code Playgroud)
这确实有效!
tau*_*tau 24
form.onsubmit = function(){
return textarea.value.match(/^\d+(\.\d+)?$/);
}
Run Code Online (Sandbox Code Playgroud)
这是你在找什么?
我希望它有所帮助.
编辑:我编辑了上面的例子,以便只有一个句号,前面至少有一个数字,后面跟着至少一个数字.
Has*_*dad 23
已接受的解决方案尚未完成,因为您可以输入多个'.',例如24 .... 22..22.通过一些小的修改,它将按预期工作:
<html>
<head>
<script type="text/javascript">
function isNumberKey(txt, evt) {
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode == 46) {
//Check if the text already contains the . character
if (txt.value.indexOf('.') === -1) {
return true;
} else {
return false;
}
} else {
if (charCode > 31 &&
(charCode < 48 || charCode > 57))
return false;
}
return true;
}
</script>
</head>
<body>
<input type="text" onkeypress="return isNumberKey(this, event);" />
</body>
</html>Run Code Online (Sandbox Code Playgroud)
Kur*_*nai 16
这是另一种允许十进制数的解决方案,并且还将十进制后的数字限制为2位小数.
function isNumberKey(evt, element) {
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode > 31 && (charCode < 48 || charCode > 57) && !(charCode == 46 || charCode == 8))
return false;
else {
var len = $(element).val().length;
var index = $(element).val().indexOf('.');
if (index > 0 && charCode == 46) {
return false;
}
if (index > 0) {
var CharAfterdot = (len + 1) - index;
if (CharAfterdot > 3) {
return false;
}
}
}
return true;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="number" id="rate" placeholder="Billing Rate" required onkeypress="return isNumberKey(event,this)">Run Code Online (Sandbox Code Playgroud)
此处介绍的所有解决方案均使用单键事件.这非常容易出错,因为输入也可以使用copy'n'paste或drag'n'drop来给出.也有一些解决方案的限制非字符键,如使用ctrl+c,Pos1等等.
我建议您不要检查每个按键,而是检查结果是否对您的期望有效.
var validNumber = new RegExp(/^\d*\.?\d*$/);
var lastValid = document.getElementById("test1").value;
function validateNumber(elem) {
if (validNumber.test(elem.value)) {
lastValid = elem.value;
} else {
elem.value = lastValid;
}
}Run Code Online (Sandbox Code Playgroud)
<textarea id="test1" oninput="validateNumber(this);" ></textarea>Run Code Online (Sandbox Code Playgroud)
oninput在文本区域中更改某些内容之后以及在呈现之前触发该事件.
您可以将RegEx扩展为您想要接受的任何数字格式.这比检查单键按压更加可维护和可扩展.