2

我正在尝试找到一个验证数字大于或小于 0 的正则表达式。

它必须允许一个数字为 1.20、-2、0.0000001 等......它根本不能是 0,它必须是一个数字,也意味着它不能是 0.00、0.0

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

试过了,但它不允许负面

4

5 回答 5

8

我不认为正则表达式是解决该问题的合适工具。

为什么不使用简单的条件?

long number = ...;

if (number != 0)
{
    // ...
}

为什么要用火箭筒杀死苍蝇?

于 2013-05-21T17:52:32.177 回答
1

刚刚尝试了一些东西:

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

在线演示

于 2013-05-21T17:55:51.620 回答
1

还尝试了一些东西:

-?[0-9]*([1-9][0-9]*(\.[0-9]*)?|\.[0-9]*[1-9][0-9]*)

演示:http ://regex101.com/r/bZ8fE5

于 2013-05-21T18:05:28.450 回答
0

尝试像这样否定正则表达式

!^[0\.]+$

如果您觉得需要使用正则表达式只是因为它存储为字符串,您可以使用它Double.parseDouble()来将字符串转换为数字类型。这将具有检查字符串是否为有效数字(通过捕获NumberFormatException)的额外优势。

于 2013-05-21T17:52:47.730 回答
0

拿一个典型的正则表达式来表示一个数字,比如说

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

然后要求在小数点之前或之后有一个非零数字。根据您的示例,您不希望小数点前有前导零,因此一个简单的正则表达式可能是

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

然后决定是否仍要为此使用正则表达式。

于 2013-05-21T17:53:35.283 回答