What is the regular expression for a decimal with a precision of 2?
Valid examples:
123.12
2
56754
92929292929292.12
0.21
3.1
This will allow decimal with exponentiation and upto 2 digits ,
^[+-]?\d+(\.\d{2}([eE](-[1-9]([0-9]*)?|[+]?\d+))?)?$
Demo
Valid regex tokens vary by implementation. A generic form is:
[0-9]+(\.[0-9][0-9]?)?
More compact:
\d+(\.\d{1,2})?
Both assume that both have at least one digit before and one after the decimal place.
To require that the whole string is a number of this form, wrap the expression in start and end tags such as (in Perl's form):
^\d+(\.\d{1,2})?$
To match numbers without a leading digit before the decimal (.12
) and whole numbers having a trailing period (12.
) while excluding input of a single period (.
), try the following:
^(\d+(\.\d{0,2})?|\.?\d{1,2})$
Wrapped the fractional portion in ()?
to make it optional. Be aware that this excludes forms such as 12.
Including that would be more like ^\d+\\.?\d{0,2}$
.
Use ^\d{1,6}(\.\d{1,2})?$
to stop repetition and give a restriction to whole part of the decimal value.
preg_match("/^-?\d+[\.]?\d\d$/", $sum)
For numbers that don't have a thousands separator, I like this simple, compact regex:
\d+(\.\d{2})?|\.\d{2}
or, to not be limited to a precision of 2:
\d+(\.\d*)?|\.\d+
The latter matches
1
100
100.
100.74
100.7
0.7
.7
.72
And it doesn't match empty string (like \d*.?\d* would)
In general, i.e. unlimited decimal places:
^-?(([1-9]\d*)|0)(.0*[1-9](0*[1-9])*)?$
.