1

我在正则表达式中遇到了一些带有验证数字的东西,asp.net。我想限制最大的总位数为 5。十进制数最多为 2 个位置,不能超过 2 位,但需要有效的总字数不大于 5。

Eg. 
Valid Numbers
12345
1234.5
123.45
0.12

Invalid Numbers
1.2345 ( decimal digit is 4. and validation fail because decimal digits are more than 2 )
1.234 and 12.345 ( decimal digit is 3. and validation fail because decimal digits are more than 2 )

我试过了:

String regnumeric = @"^([0-9]{0,5})(\.[0-9]{0,5})?$";

但我观察到它与我需要的不匹配。它只检查小数点之前的计数,小数点后的计数可以是0到5。它不包括检查总位数。我不知道该怎么做

4

3 回答 3

2

您的第一个问题是\.[0-9]{0,5}说您最多可以有 5 个十进制数字,您只需要 2 个。如果您想要稍微短一点的正则表达式,请使用

^([0-9]{0,5})(\.[0-9]{0,2})?$

然后只需检查结果以确保长度小于 5

于 2013-05-03T03:31:02.627 回答
1
(\d{1}(\.\d{1,2})+)|(\d{2}(\.\d{1,2}))+|(\d{3}(\.\d{1,2})+)|(\d{4}(\.\d{1})+)|\d{5}

它不漂亮,但它有效。

于 2013-05-03T03:25:52.057 回答
0

使用匹配无效器?!定义无效的事物,从而导致匹配失败。一旦这些到位,只需获得价值。这是一个例子:

^(?![\d.]{7,})(?!\d{6,})(?!\d*\.\d{3,})(\d*\.?\d*)$

^ - 文本的开头

(?![\d.]{7,}) - 如果发现七个字符(包括 .),则匹配无效

(?!\d{6,}) - 如果发现超过五个数字无效

(?!\d*\.\d{3,})-> 如果具有 3 位或更多小数位的数字(可能)无效

(\d*\.?\d*) - 此时匹配任何数字,例如(.12、1.1 或 12345)

$ - 文本结束。

请注意,如果 .12 无效,请将上述匹配代码更改为(\d+\.?\d*)这将导致模式匹配至少 1 个数字而不是零个或多个数字。

于 2013-06-19T15:27:07.277 回答