正则表达式匹配浮点数

时间:2010-01-26 13:45:27

标签: regex

我有这种模式:

[0-9]*\.?[0-9]

它匹配数字,但它也匹配3.5.4:

  1. 3.5
  2. 0.4
  3. 如何修复(此输入不应匹配)?
    更新:
    这也应该适用于输入: 1 3.5.4 10

    1.2。是不允许的 .3是允许的

    不允许使用任何不是数字的字符,例如:a1 2.4f 3. 45,67!

5 个答案:

答案 0 :(得分:12)

匹配json数字:

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

JSON number

使用此正则表达式匹配.123

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

答案 1 :(得分:10)

海报发表评论后更新了答案:

使用lookahead / lookbehind确保前后字符为空格:

这是一个与你的版本非常匹配的版本,但不会进行部分匹配:

(?:^|(?<=\s))[0-9]*\.?[0-9](?=\s|$)

对于这两个示例,当在字符串1 2.3.4 5.6上运行时,它仅匹配15.6

答案 2 :(得分:7)

您必须决定是否要接受不带前导零的数字(例如.123)。如果你不这样做,那么正则表达式很简单:

^-?[0-9]+(\.[0-9]+)?$

如果你这样做,那就有点复杂了:

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

两者都假设小数点后面必须至少跟一个数字。如果您不接受负数,那么前导-?是不必要的。

答案 3 :(得分:2)

你的正则表达式没有锚定。如果您想匹配仅包含数字的行而不使用其他内容:

^[0-9]*\.?[0-9]$

答案 4 :(得分:1)

除非你真的需要,否则你不应该使用正则表达式。

相反,您应该使用您的语言的内置数字解析方法。

我从你的其他问题中假设你正在使用Javascript;如果是这样,您应该致电parseFloat