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

Lan*_*ndo 61 regex model asp.net-mvc-3

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

希望验证我的模型上的ID在提交时大于0.

gho*_*oti 132

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

    ^[1-9][0-9]*$
Run Code Online (Sandbox Code Playgroud)

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

请注意,第二个是扩展RE.在Basic RE中可以表达同样的事情,但是现在几乎所有事情都理解ERE.让我们将表达式分解为更容易消化的部分.

    ^(
Run Code Online (Sandbox Code Playgroud)

插入符号在行的开头匹配null,因此在正则表达式之前用插入符号将其锚定到行的开头.由于下面的or-bar,左括号是开括号.稍后会详细介绍.

      0*[1-9][0-9]*(\.[0-9]+)?
Run Code Online (Sandbox Code Playgroud)

这匹配任何整数任何高于1的浮点数.所以我们2.0匹配,但0.25不会.将0*在开始处理前置零,因此005 == 5.

                              |
Run Code Online (Sandbox Code Playgroud)

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

第二部分:

                               0+\.[0-9]*[1-9][0-9]*
Run Code Online (Sandbox Code Playgroud)

此任意数量的与一个或多个开始相匹配0的字符(替换+*匹配的零个或多个零,即.25),后跟一个句点,随后的数字串,其包括至少一个不是一个0.因此,这一切都符合上面0和下面1.

                                                    )$
Run Code Online (Sandbox Code Playgroud)

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

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


cwh*_*ris 15

那这个呢: ^[1-9][0-9]*$

  • @ m0skit0并且您没有考虑这个问题:`"想要验证我的模型上的ID在提交时大于0." (9认同)
  • 是的,他希望使用此正则表达式**验证**输入是否大于 0。这并不能证实这一点。它只验证它不是 0。 (2认同)

fox*_*ris 8

另一种解决方案:

^[1-9]\d*$
Run Code Online (Sandbox Code Playgroud)

\d 相当于 [0-9]