Currency validation
You could use a regexp:
var regex = /^\d+(?:\.\d{0,2})$/;var numStr = "123.20";if (regex.test(numStr)) alert("Number is valid");
If you're not looking to be as strict with the decimal places you might find it easier to use the unary (+
) operator to cast to a number to check it's validity:
var numStr = "123.20";var numNum = +numStr; // gives 123.20
If the number string is invalid, it will return NaN
(Not a Number), something you can test for easily:
var numStr = "ab123c";var numNum = +numStr;if (isNaN(numNum)) alert("numNum is not a number");
It will, of course, allow a user to add more decimal places but you can chop any extra off using number.toFixed(2)
to round to 2 decimal places. parseFloat
is much less strict with input and will pluck the first number it can find out of a string, as long as that string starts with a number, eg. parseFloat("123abc")
would yield 123
.
I built my answer from the accepted answer.
var regex = /^[1-9]\d*(((,\d{3}){1})?(\.\d{0,2})?)$/;
^[1-9]
The number must start with 1-9\d*
The number can then have any number of any digits(...)$
look at the next group from the end (...)$
(...)?(...)?
Look for two groups optionally. The first is for the comma, the second is for the decimal.(,\d{3}){1}
Look for one occurance of a comma followed by exactly three digits\.\d{0,2}
Look for a decimal followed by zero, one, or two digits.
This regex works off of these rules:
- Valid values are numbers 0-9, comma and decimal point.
If a customer enters more than one decimal point or more than one comma, the value is invalid and will not be accepted.
Examples of invalid input values
- 1.2.3
- 1,2,4
- Examples of valid input values
- 1.23
- 1,000
- 3967.
- 23
- 1.2
- 999,999.99
An example can be seen here:http://jsfiddle.net/rat141312/Jpxu6/1/
UPDATE
by changing the [1-9]
in the regex to [0-9]
any number less than 1
can also be validated. Example: 0.42, 007
/[1-9]\d*(?:\.\d{0,2})?/[1-9] - must start with 1 to 9\d* - any number of other digits(?: )? - non capturing optional group\. - a decimal point\d{0,2} - 0 to 2 digits
does that work for you?or maybe parseFloat:
var float = parseFloat( input );