任何大于0的正则表达式?

时间:2012-01-27 18:53:48

标签: regex asp.net-mvc-3 model

将验证应用于MVC中的模型,并希望使用Regex。

想要验证我的模型上的ID在提交时大于0。

14 个答案:

答案 0 :(得分:124)

我不知道MVC是如何相关的,但是如果你的ID是一个整数,那么这个BRE应该这样做:

    ^[1-9][0-9]*$

如果你想匹配实数(浮点数)而不是整数,你需要处理上面的情况,以及正常的十进制数(即2.53.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

                              |

管道角色在此上下文中是“或-bar ”。为了评估此表达式,它具有比其他所有内容更高的优先级,并且有效地将两个正则表达式连接在一起。括号用于对由or-bars分隔的多个表达式进行分组。

第二部分:

                               0+\.[0-9]*[1-9][0-9]*

这匹配以一个或多个0字符开头的任何数字(将+替换为*以匹配零个或多个零,即.25),然后是句点后跟一串数字,其中包含至少一个不是0的数字。因此,这会匹配0以上1以上的所有内容。

                                                    )$

最后,我们关闭括号并将正则表达式锚定到带有美元符号的行的末尾,就像插入符号固定到行的开头一样。

当然,如果您让编程语言以数字方式评估某些内容而不是尝试将其与正则表达式进行匹配,那么您将节省头痛 CPU。

答案 1 :(得分:13)

这个怎么样:^[1-9][0-9]*$

答案 2 :(得分:3)

答案 3 :(得分:3)

我认为最好的解决方案是在正则表达式的两个括号之间添加+号:

^[1-9]+[0-9]*$

答案 4 :(得分:2)

如果您只想要非负整数,请尝试: ^\d+$

答案 5 :(得分:2)

另一种解决方案:

^[1-9]\d*$

\d相当于[0-9]

答案 6 :(得分:1)

你去吧:

MatchCollection myMatches = Regex.Matches(yourstring, @"[1-9][0-9]*");

提交:

if(myMatches.Count > 0)
{
   //do whatever you want
}

答案 7 :(得分:1)

我试过这一个,它适用于所有大于零的十进制/整数

允许空格:^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*$

没有空格:^(?=.*[1-9])\d*(?:\.\d{1,2})?$

参考:Regex greater than zero with 2 decimal places

答案 8 :(得分:0)

您可以使用以下表达式:

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

有效条目:1 1. 1.1 1.0所有正实数

无效条目:所有负实数和0和0.0

答案 9 :(得分:0)

简单的答案是:^[1-9][0-9]*$

答案 10 :(得分:0)

仅针对2位小数进行简化。

^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*$

参考:https://www.regextester.com/94470

答案 11 :(得分:-2)

我认为这完全有效:

([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

答案 12 :(得分:-2)

[1-9]\.\d{1,2}|0\.((0?[1-9])|([1-9]0?)){1,2}\b

答案 13 :(得分:-7)

非常简单的回答这个用法:\ d *