I want a regex in JavaScript for validating decimal numbers.
It should allow only up to two decimal places. For example, it should allow 10.89
but not 10.899
.
It should also allow only one period (.
). For example, it should allow 10.89
but not 10.8.9
.
This question is related to
javascript
regex
Try a regular expression like this:
(?=[^\0])(?=^([0-9]+){0,1}(\.[0-9]{1,2}){0,1}$)
Allowed: 1, 10.8, 10.89, .89, 0.89, 1000
Not Allowed: 20. , 50.89.9, 12.999, ., Null character Note this works for positive numbers
/^\d+(\.\d{1,2})?$/
var regexp = /^\d+(\.\d{1,2})?$/;_x000D_
_x000D_
console.log("'.74' returns " + regexp.test('.74'));_x000D_
console.log("'7' returns " + regexp.test('7'));_x000D_
console.log("'10.5' returns " + regexp.test('10.5'));_x000D_
console.log("'115.25' returns " + regexp.test('115.25'));_x000D_
console.log("'1535.803' returns " + regexp.test('1535.803'));_x000D_
console.log("'153.14.5' returns " + regexp.test('153.14.5'));_x000D_
console.log("'415351108140' returns " + regexp.test('415351108140'));_x000D_
console.log("'415351108140.5' returns " + regexp.test('415351108140.5'));_x000D_
console.log("'415351108140.55' returns " + regexp.test('415351108140.55'));_x000D_
console.log("'415351108140.556' returns " + regexp.test('415351108140.556'));
_x000D_
/ /
: the beginning and end of the expression^
: whatever follows should be at the beginning of the string you're testing\d+
: there should be at least one digit( )?
: this part is optional\.
: here goes a dot\d{1,2}
: there should be between one and two digits here$
: whatever precedes this should be at the end of the string you're testingYou can use regexr.com or regex101.com for testing regular expressions directly in the browser!
Try the following expression: ^\d+\.\d{0,2}$
If you want the decimal places to be optional, you can use the following: ^\d+(\.\d{1,2})?$
EDIT: To test a string match in Javascript use the following snippet:
var regexp = /^\d+\.\d{0,2}$/;
// returns true
regexp.test('10.5')
^\d+(\.\d{1,2})?$
will allow:
244
10.89
9.5
will disallow:
10.895
10.
10.8.9
Does this work?
[0-9]{2}.[0-9]{2}
function CheckValidAmount() {
var amounttext = document.getElementById('txtRemittanceNumber').value;
if (!(/^[-+]?\d*\.?\d*$/.test(amounttext))){
alert('Please enter only numbers into amount textbox.')
document.getElementById('txtRemittanceNumber').value = "10.00";
}
}
This is the function which will take decimal number with any number of decimal places and without any decimal places.
Thanks ... :)
The schema for passing the value in as a string. The regex will validate a string of at least one digit, possibly followed by a period and exactly two digits:
{
"type": "string",
"pattern": "^[0-9]+(\\.[0-9]{2})?$"
}
The schema below is equivalent, except that it also allows empty strings:
{
"type": "string",
"pattern": "^$|^[0-9]+(\\.[0-9]{2})?$"
}
I found that I could use
^\d+(\.\d+)?$
for more than two decimal places.
Please see my project of the cross-browser filter of value of the text input element on your web page using JavaScript language: Input Key Filter . You can filter the value as an integer number, a float number, or write a custom filter, such as a phone number filter. See an example of custom filter of input of an float number with decimal pointer and limitation to 2 digit after decimal pointer:
<!doctype html>_x000D_
<html xmlns="http://www.w3.org/1999/xhtml" >_x000D_
<head>_x000D_
<title>Input Key Filter Test</title>_x000D_
<meta name="author" content="Andrej Hristoliubov [email protected]">_x000D_
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>_x000D_
_x000D_
<!-- For compatibility of IE browser with audio element in the beep() function._x000D_
https://www.modern.ie/en-us/performance/how-to-use-x-ua-compatible -->_x000D_
<meta http-equiv="X-UA-Compatible" content="IE=9"/>_x000D_
_x000D_
<link rel="stylesheet" href="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.css" type="text/css"> _x000D_
<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/Common.js"></script>_x000D_
<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.js"></script>_x000D_
_x000D_
</head>_x000D_
<body>_x000D_
<h1>Float field</h1>_x000D_
<input id="Float" _x000D_
onchange="javascript: onChangeFloat(this)"_x000D_
onblur="inputKeyFilter.isNaN(parseFloat(this.value), this);"_x000D_
/>_x000D_
<script>_x000D_
function CreateFloatFilterCustom(elementID, onChange, onblur){_x000D_
try{_x000D_
inputKeyFilter.Create(elementID_x000D_
, onChange_x000D_
, function(elementInput, value){//customFilter_x000D_
if(value.match(/^(-?\d*)((\.(\d{0,2})?)?)$/i) == null){_x000D_
inputKeyFilter.TextAdd(isRussian() ?_x000D_
"?????????? ??????: -[0...9].[0...9] ??? -[0...9]e-[0...9]. ????????: -12.34 1234"_x000D_
: "Acceptable formats: -[0...9].[0...9] or -[0...9]e-[0...9]. Examples: -12.34 1234"_x000D_
, elementInput);_x000D_
return false;_x000D_
}_x000D_
return true;_x000D_
}_x000D_
, onblur_x000D_
)_x000D_
} catch(e) {_x000D_
consoleError("Create float filter failed. " + e);_x000D_
}_x000D_
}_x000D_
_x000D_
CreateFloatFilterCustom("Float");_x000D_
_x000D_
function onChangeFloat(input){_x000D_
inputKeyFilter.RemoveMyTooltip();_x000D_
var elementNewFloat = document.getElementById("NewFloat");_x000D_
var float = parseFloat(input.value);_x000D_
if(inputKeyFilter.isNaN(float, input)){_x000D_
elementNewFloat.innerHTML = "";_x000D_
return;_x000D_
}_x000D_
elementNewFloat.innerHTML = float;_x000D_
}_x000D_
</script>_x000D_
New float: <span id="NewFloat"></span>_x000D_
</body>_x000D_
</html>
_x000D_
Also see my page example of the input key filter
as compared from the answer gven by mic... it doesnt validate anything in some of the platforms which i work upon... to be precise it doesnt actually work out in Dream Viewer..
hereby.. i re-write it again..which will work on any platform.. "^[0-9]+(.[0-9]{1,2})?$".. thnkss..
Numbers with at most 2 decimal places:
/^\d+(?:\.\d{1,2})?$/
This should work fine. Please try out :)
Since you asked for decimal numbers validation, for completeness' sake, I'd use a regex that doesn't allow strings like 06.05.
^((0(\.\d{1,2})?)|([1-9]\d*(\.\d{1,2})?))$
Slightly more complicated, but returns false in that case.
Source: Stackoverflow.com