用于十进制避免或语法的正则表达式

时间:2011-06-21 10:41:40

标签: .net regex

我需要验证以下内容(在.Net中)。

带或不带小数点的数字,最小1,最多6个字符(包括小数)。 如果有小数,则只能有一个小数位。 所以这些都可以: 123 123456 1234.5 123.4 等。

这些不是: 1234567 123.15 1.100 等

我知道如何匹配可变数量的数字,但是通过使用或语法来完成上述操作的唯一方法(通过使用|我认为?)你可以在没有语法的情况下实现这样的事情吗?

3 个答案:

答案 0 :(得分:5)

您可以通过使用更加模糊的结构(例如环视断言)轻松避免使用“或”。你为什么要避免它?

E.g。这应该按你的要求做:

^(?=.{1,6}$)\d+(\.\d)?$

答案 1 :(得分:1)

此正则表达式为^(\d{1,6}|\d{1,4}\.\d)$。以下是如何推导出来的:

\d                        A single digit
\d{1,6}                   1 to 6 digits [a]
\d{1,4}\.\d               1 to 4 digits, followed by a dot and one digit [b]
(\d{1,6}|\d{1,4}\.\d)     Either [a] or [b] anywhere within the input
^(\d{1,6}|\d{1,4}\.\d)$   As above, but the input must contain nothing else

要获得出色的正则表达式参考,请转到http://www.regular-expressions.info

答案 2 :(得分:1)

\b(\d{1,5}\.\d|\d{1,6})\b

演示看看here