【发布时间】:2026-02-20 04:25:04
【问题描述】:
我正在寻找一种使用正则表达式检查数字是否大于 0 的方法。
例如:
-
12将返回 true -
0将返回 false。
【问题讨论】:
-
为什么必须是正则表达式?对于这项工作来说,这是一个糟糕的工具
-
Gareth,在某些情况下,谷歌分析只允许您使用正则表达式或完全匹配 ;-)
标签: regex
我正在寻找一种使用正则表达式检查数字是否大于 0 的方法。
例如:
12 将返回 true0 将返回 false。【问题讨论】:
标签: regex
我不知道 MVC 是如何相关的,但是如果你的 ID 是整数,这个 BRE 应该这样做:
^[1-9][0-9]*$
如果您想匹配实数(浮点数)而不是整数,则需要处理上述情况以及普通十进制数(即2.5 或3.3̅),即模式介于 0 和 1 之间的情况(即0.25),以及您的模式的小数部分为0的情况。(即2.0)。在此过程中,我们将添加对整数前导零的支持(即005):
^(0*[1-9][0-9]*(\.[0-9]+)?|0+\.[0-9]*[1-9][0-9]*)$
请注意,第二个是扩展 RE。同样的事情可以在 Basic RE 中表达,但现在几乎所有东西都可以理解 ERE。让我们把表达式分解成更容易理解的部分。
^(
插入符号与行首的 null 匹配,因此在正则表达式之前使用插入符号将其锚定到行首。左括号在那里是因为下面的 or-bar。稍后会详细介绍。
0*[1-9][0-9]*(\.[0-9]+)?
这匹配任何整数或任何大于 1 的浮点数。所以我们的 2.0 会匹配,但 0.25 不会匹配。开头的0* 处理前导零,所以005 == 5。
|
在此上下文中,管道字符是“or-bar”。出于评估此表达式的目的,它具有比其他所有内容更高的优先级,并且有效地将两个正则表达式连接在一起。圆括号用于对由 or-bars 分隔的多个表达式进行分组。
还有第二部分:
0+\.[0-9]*[1-9][0-9]*
这匹配以一个或多个0 字符开头的任何数字(将+ 替换为* 以匹配零个或多个零,即.25),后跟一个句点,后跟一串数字其中至少包括一个不是0。所以这匹配0 以上和1 以下的所有内容。
)$
最后,我们关闭括号并将正则表达式锚定到带有美元符号的行尾,就像插入符号锚定到行首一样。
当然,如果您让您的编程语言对某事物进行数值计算,而不是尝试将其与正则表达式进行匹配,那么您将节省和 CPU 的麻烦。
【讨论】:
这个呢:^[1-9][0-9]*$
【讨论】:
"Looking to validate that an ID on my model is greater than 0 on submit."
整数的另一种解决方案:
^[1-9]\d*$
\d 等同于[0-9]
【讨论】:
代码:
^([0-9]*[1-9][0-9]*(\.[0-9]+)?|[0]+\.[0-9]*[1-9][0-9]*)$
【讨论】:
我认为最好的解决方案是在正则表达式的两个括号之间添加+号:
^[1-9]+[0-9]*$
【讨论】:
[1-9]+[0-9]* 而不是公认答案中的内容?
如果您只想要非负整数,请尝试:
^\d+$
【讨论】:
我试过这个,它适用于所有大于零的十进制/整数
允许空格:^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*$
没有空格:^(?=.*[1-9])\d*(?:\.\d{1,2})?$
【讨论】:
简单的答案是:^[1-9][0-9]*$
【讨论】:
你去吧:
MatchCollection myMatches = Regex.Matches(yourstring, @"[1-9][0-9]*");
提交时:
if(myMatches.Count > 0)
{
//do whatever you want
}
【讨论】:
-156 会发生什么?你的正则表达式说没关系,但肯定不行。
您可以使用以下表达式:
(^\d*\.?\d*[1-9]+\d*$)|(^[1-9]+\.?\d*$)
有效条目:1 1. 1.1 1.0 所有正实数
无效条目:所有负实数以及 0 和 0.0
【讨论】:
【讨论】:
我认为这会很有效:
([1-9][0-9]*(\.[0-9]*[1-9])?|0\.[0-9]*[1-9])
有效:
1
1.2
1.02
0.1
0.02
无效:
0
01
01.2
1.10
【讨论】:
[1-9]\.\d{1,2}|0\.((0?[1-9])|([1-9]0?)){1,2}\b
【讨论】:
对此使用非常简单的答案:\d*
【讨论】: