6

我正在尝试检查小数点前最多有 13 位数字的双精度数,小数点和后面的数字是可选的。所以用户可以写一个整数或带小数的数字。

首先,我有这个:

if (check.matches("[0-9](.[0-9]*)?"))

我已经浏览了 Google 上的几个页面,尽管付出了各种努力,但仍然没有任何运气让它工作。我的想法是这样做,但它不起作用:

[0-9]{1,13}(.[0-9]*)?

我该怎么做?

4

6 回答 6

14

不要忘记转义点。

if (check.matches("[0-9]{1,13}(\\.[0-9]*)?"))
于 2013-01-28T13:30:29.637 回答
5

首先你需要转义点(在java中这将是[0-9]{1,13}(\\.[0-9]*)?)。其次,不要忘记双打还有另一种流行的表现形式——科学。所以这1.5e+4又是一个有效的双数。最后不要忘记双数可能是负数,或者可能根本没有整数部分。例如-1.3.56是有效的双打。

于 2013-01-28T13:32:41.040 回答
2

您需要转义点,并且至少需要点后的数字

[0-9]{1,13}(\\.[0-9]+)?

在 Regexr 上查看

于 2013-01-28T13:31:40.587 回答
1

约翰的回答很接近。但是如果您接受负值,则需要添加一个“-”,以防它是负数。所以,它会被修改为-?[0-9]{1,13}(\.[0-9]*)?

于 2014-12-28T05:32:44.513 回答
1

如果您需要使用逗号和负数验证小数:

Object testObject = "-1.5";
boolean isDecimal = Pattern.matches("^[\\+\\-]{0,1}[0-9]+[\\.\\,]{1}[0-9]+$", (CharSequence) testObject);

祝你好运。

于 2015-02-17T13:52:31.410 回答
0

你可以使用 \d+(\.\d*)? 如下科特林语言 -

    val rawString = "Hi..  2345.97 ..Bye"
    val DOUBLE_PATTERN = Pattern.compile("\\d+(\\.\\d*)?")
    val matcher = DOUBLE_PATTERN.matcher(rawString)
    var filterNumber = 0.0
    if (matcher.find())
        filterNumber = matcher.group() // extracted number- 2345.97
于 2020-07-09T13:07:03.570 回答