Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the shortest regex that can match non-zero floating point numbers with any number of decimal places?

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.

like image 208
luvieere Avatar asked Dec 02 '09 08:12

luvieere


People also ask

What is the expression to represent floating point number?

[0-9]+|[0-9]+). This regular expression matches an optional sign, that is either followed by zero or more digits followed by a dot and one or more digits (a floating point number with optional integer part), or that is followed by one or more digits (an integer).

What is the regex for decimal number?

A better regex would be /^\d*\.?\ d+$/ which would force a digit after a decimal point. @Chandranshu and it matches an empty string, which your change would also solve.

How do you validate decimals?

To validate decimal numbers in JavaScript, use the match() method. It retrieves the matches when matching a string against a regular expression.


1 Answers

^-?(0\.\d*[1-9]|[1-9]\d*(\.\d+)?)$

EDIT Updated to reflect new requirements (last decimals can be zero)

^-?(0\.\d*[1-9]\d*|[1-9]\d*(\.\d+)?)$

(Shorter than using lookahead: ^-?(0\.(?=[1-9])\d*|[1-9]\d*(\.\d+)?)$.)


EDIT2 If e.g. 001.000 can pass

^-?(?=.*[1-9])\d+(\.\d+)?$
like image 84
jensgram Avatar answered Oct 11 '22 02:10

jensgram