我正在寻找一种使用正则表达式检查数字是否大于0的方法。
例如:
12
会返回true0
会返回false。
我正在寻找一种使用正则表达式检查数字是否大于0的方法。
例如:
12
会返回true0
会返回false。Answers:
我不知道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栏,因此出现了括号。以后再说。
0*[1-9][0-9]*(\.[0-9]+)?
这将匹配大于1的任何整数或任何浮点数。因此我们2.0
将被匹配,但0.25
不会匹配。在0*
一开始把手前置零,因此005 == 5
。
|
在这种情况下,竖线字符是“或”。为了评估此表达式,它的优先级高于所有其他表达式,并将两个正则表达式有效地连接在一起。括号用于对多个用or-分隔的表达式进行分组。
第二部分:
0+\.[0-9]*[1-9][0-9]*
这匹配以一个或多个0
字符开头的任何数字(替换+
为*
以匹配零个或多个零,即.25
),后跟一个句点,然后是一串数字,其中包括至少一个不是a的数字0
。因此,这匹配上方0
和下方的所有内容1
。
)$
最后,我们关闭括号并将正则表达式锚定到带有美元符号的行的末尾,就像插入符号锚定到行的开头一样。
当然,如果让您的编程语言以数字方式评估某些内容,而不是尝试将其与正则表达式进行匹配,则可以避免麻烦和CPU。
那这个呢: ^[1-9][0-9]*$
"Looking to validate that an ID on my model is greater than 0 on submit."
码:
^([0-9]*[1-9][0-9]*(\.[0-9]+)?|[0]+\.[0-9]*[1-9][0-9]*)$
参考:https : //social.msdn.microsoft.com/Forums/zh-CN/17089c0f-f9cb-437a-9667-ba8329681624/regular-expression-number-greater-than-0?forum=regexp
我认为最好的解决方案是在正则表达式的两个括号之间添加+号:
^[1-9]+[0-9]*$
[1-9]+[0-9]*
而不是公认的答案呢?
你去那里:
MatchCollection myMatches = Regex.Matches(yourstring, @"[1-9][0-9]*");
提交时:
if(myMatches.Count > 0)
{
//do whatever you want
}
-156
?您的正则表达式表示肯定没问题时可以。
我试过这个,对所有大于零的十进制/整数都有效
允许空白: ^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*$
无空格: ^(?=.*[1-9])\d*(?:\.\d{1,2})?$
参考:正则表达式大于零,小数点后两位
简单的答案是: ^[1-9][0-9]*$
我认为这将完美地工作:
([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