Reputation: 404
Features
But...i need improve to allow user digits only two numbers after the dot
Valid examples:
The current code (adapted from this, not need to keep exactly the same code...) :
<HTML>
<HEAD>
<SCRIPT language=Javascript>
<!--
function isNumberKey(evt,obj){
var containsDot = obj.value.indexOf(".");
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode > 31 && (charCode < 48 || charCode > 57)){
if(charCode == 46 && containsDot < 0){
return true;
}
return false;
}
return true;
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<INPUT id="txtChar" onkeypress="return isNumberKey(event,this)" type="text" name="txtChar">
</BODY>
</HTML>
Upvotes: 1
Views: 3275
Reputation: 3915
I've posted a fully working version of this here: http://jsfiddle.net/georgecalm/NRtVs/2/
HTML:
<input id="txt" type="text" name="txtChar" />
JS:
var isStrValid = function(str) {
return ((str.match(/[^\d^.]/) === null)
&& (str.replace(/\d+\.?\d?\d?/, "") === ""));
};
var node = dojo.byId("txt");
dojo.connect(node, "onkeyup", function() {
if (!isStrValid(node.value)) {
node.value = node.value.substring(0, node.value.length-1);
}
});
The first checks (of the isStrValid) makes sure you don't have anything but numbers and a dot. The second checks the pattern.
Upvotes: 1
Reputation: 3472
You can start off the function with
if (obj.value.match(/\.[0-9][0-9]/)) {
// Already has two decimals
return false;
}
Upvotes: 0
Reputation: 142921
If it has a dot, but does not have two digits after it, return false.
if(containsDot && obj.value.split(".")[1].length != 2){
return false;
}
Upvotes: 0
Reputation: 14060
Just use a regular expression. E.g.
function isNumberKey(evt, obj){
return obj.value.match(/[0-9]*(\.[0-9]{0,2})?/)
}
Upvotes: 3