Hi i need to write a regular expression for float value (5,2)
As per my understanding (5,2)
means
- Total length cannot exceed 5 digits i.e.
999.99
- Digits before decimal is 3 and after decimal is 2 i.e开发者_开发技巧.
999.99
I wrote this: ValidationExpression="(^\d{0,3}[.]?\d{0,2}$)"
but this is accepting 9999
and 99999
which is wrong because in both case before decimal is more than 3 digits.
Please help?
For your case of 0-3 digits before dot and 0-2 after dot:
[-+]?[0-9]{0,3}\.?[0-9]{1,2}
Notice the subtle difference of requiring at least one number after the dot. If you allow 0 numbers after the dot, you will match just .
, which is not a number.
The general convention on floating point numbers is to allow starting with the decimal separator and write just the decimal part (.e.g .123
means 0.123
), so I'd recommend you to do that unless you have other requirements to regard.
This will match:
.1
0.1
0.01
100.02
-3.01
If you want to, you can use \d
instead of [0-9]
.
NOTE: If you need multi-language support, different locales have different decimal separators (Norwegian has ,
, for instance).
General matcher for floating point numbers (from regular-expressions.info):
[-+]?[0-9]*\.?[0-9]+
Validation ("is this string a floating point number") needs anchoring:
^[-+]?[0-9]*\.?[0-9]+$
And finally, here's an expression allowing exponents (e.g. -0.1e-9):
[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?
I'd suggest
ValidationExpression = @"^\d{1,3}(?:\.\d{1,2})?$)"
This requires at least one (integer) digit, and if there is a decimal part, it has to be one or two digits long. So this will match
1
1.0
0.12
999.99
but fail
.1
1.
000001.0
9999
Remove the question mark, it made the dot optional.
If you want a regex that match "123.45", "123.4" and "123" but NOT "123.", use this:
(^\d{0,3}([.]\d{0,2})?$)
in wich the optional part is the entire decimal part of the number
\d{0,3} means "between zero and 3 digits"
You should use
(^\d{3}\.\d{2]$)
If you do not want leading zeroes, use this one instead:
(^[1-9]\d{2}\.\d{2]$)
"^\d{1,12}(?:[.,]\d{1,2})?$"
means 1-12 digits before separator, then separator (dot or comma), then 0-2 digits after separator, i.e.:
9
99
999,1
9999,22
(and the same with dot)
精彩评论