Reputation: 6186
I want to write a regex to match all positive double numbers with maximum 2 digits after decimal point.
My first approach was this:
^\\d+(?:\\.\\d{1,2})?$
it works fine for most cases but not for scientific notations, for example 10000000
when it's written as 1.0E7
.
I've found an answer here and I made adapted it to my case resulting:
[\\s=]+([+]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d{1,2}))$
but now it returns false for a lot of "good" values.
Any idea how to make it match only positive numerical values with 0 to 2 digits after the decimal point but also the scientific notation of the numbers?
Upvotes: 4
Views: 3742
Reputation: 8413
Assuming zero is not a positive number, you can use
^(?:0\.(?:0[1-9]|[1-9]\d?)|[1-9]\d*(?:\.\d{1,2})?)(?:e[+-]?\d+)?$
where
(?:0\.(?:0[1-9]|[1-9]\d?)
matches a positive number smaller than 1 with at most 2 decimal places[1-9]\d*(?:\.\d{1,2})?
matches a positive number equal or larger than 1, with optional up to 2 decimal places(?:e[+-]?\d+)?
optionally matches the scientific notationCaveats:
.
without decimal places allowed (can be fixed by using \.\d{0,2}
)Demo: https://regex101.com/r/ljOaIb/1/
Upvotes: 3