I have this pattern:
[0-9]*\.?[0-9]
It matches numbers but it also matches 3.5.4 as:
- 3.5
- .4
How to fix that(this input shouldn't be matched)?
UPDATE: this also should work on input: 1 3.5.4 101.2. is not allowed
.3 i开发者_如何学Gos allowedany char that is not poart of numer is not allowed, like: a1 2.4f 3. 45, 67!
To match a json number:
^[-]?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?$
Use this regex to match .123
:
^[-]?((0|[1-9][0-9]*)(\.[0-9]+)?|\.[0-9]+)([eE][+-]?[0-9]+)?$
Updated answer after comment from poster:
Use lookahead / lookbehind to make sure that the characters before and after are spaces:
Here's a version that closely matches yours, but that won't make partial matches:
(?:^|(?<=\s))[0-9]*\.?[0-9](?=\s|$)
For both these examples, when run on the string 1 2.3.4 5.6
it matches only 1
and 5.6
.
You have to decide if you want to accept numbers without leading zeros (eg .123). If you don't then the regex is easy:
^-?[0-9]+(\.[0-9]+)?$
If you do then it's a little more complex:
^-?(?:[0-9]+|[0-9]*\.[0-9]+)$
Both presume that a decimal point must be followed by at least one digit. If you don't accept negative numbers then the leading -?
is unnecessary.
Your regex is not anchored. If you want to match lines that contain only numbers and nothing else use:
^[0-9]*\.?[0-9]$
You should not use a regex for this unless you really need to.
Instead, you should use your language's built-in number parsing methods.
I assume from your other questions that you're using Javascript; if so, you should call parseFloat
.
精彩评论