What's the shortest regex that can match non-zero floating point numbers with any number of decimal places?
It should accept numbers like
-1
-5.9652
-7.00002
-0.8
-0.0500
-0.58000
0.01
0.000005
0.9900
5
7.5
7.005
but reject constructions such as
.
.02
-.
-.996
0
-0
0.
-0.
-0.000
0.00
--
..
+
+0
+1
+.
+1.26
,etc
I do not need support for the scientific notation, with e , E and such.
The language I'm using is C#, by the way.
Note: Remember to put ^ $ if it's not done by your regexp matcher.
May I ask why the "shortest"? A pre-compiler RegExp or the same with non-matching groups could be faster. Also a test for zero could possibly be faster too.
You might wish to consider these variations.
EDIT Updated to reflect new requirements (last decimals can be zero)
(Shorter than using lookahead:
^-?(0\.(?=[1-9])\d*|[1-9]\d*(\.\d+)?)$
.)EDIT2 If e.g.
001.000
can passThis is the one I always use:
(\+|-)?([0-9]+\.?[0-9]*|\.[0-9]+)([eE](\+|-)?[0-9]+)?
Utilized in a PHP example:
Output: