2012-07-11 250 views
1

我想要一个十进制输入的正则表达式,它可以在十进制或逗号之前占用四位数,在十进制/逗号之后可以占用两位数。没有小数的5位数字无效。也可以接受null。十进制值的正则表达式

正确价值观可以是:

1,1111,2222.56,0.99,9999.5间

无效

88888,8.888,

验证表明还包括逗号和小数点。

如果可能,那么也解释表达式。

+0

已经回答:http://stackoverflow.com/questions/968825/regular-expression-for-decimal-number – 2012-07-11 11:47:49

回答

10
Regex.IsMatch(strInput, @"[\d]{1,4}([.,][\d]{1,2})?"); 

,并解释:

[\d]{1,4} any character of: digits (0-9) between 1 and 4 times 

[.,]   any character of: '.', ',' 

[\d]{1,2} any character of: digits (0-9) between 1 and 2 times 

(...)?  match the expression or not (zero or one) 
+0

你匹配2222y56 – 2012-07-11 11:59:18

+0

谢谢,它的工作。是否有可能为你解释正则表达式。我想知道关于每一个描述。 – Maverick 2012-07-11 12:06:30

1
[0-9]{1,4}(\.[0-9]{1,2})? 

这意味着,1到4位数字,然后可以选择小数点和1到2位数字。

+0

我想逗号也有小数 – Maverick 2012-07-11 11:54:14

0

使用这个表达式\d{4}[,\.]\d{2}\d+([,\.]\d+)?任何小数

+0

逗号也应该逃脱。 [,\。] - > [\,\。] .Hmm,其实不确定... – jon 2012-07-11 11:55:43

+0

@Jon,你错了,不需要shild逗号 – 2012-07-11 11:57:33

+0

这个“\ d {4} [,\。] \ d {2}“仅在精确9999.55匹配时才返回true,在所有其他情况下返回false。理想情况下,1,12,137,6544,7.23都应该有效,但99999,9.369不应该是 – Maverick 2012-07-11 12:02:06

0

我们可以检查Stirng值做代码通过下面的代码

Dim Success As Boolean 
    If text.Contains(".") Then 
     Dim result As Integer = Split(text, ".")(1) 
     If result > 0 Then 
      Success = True  'Containing Decimal Points greater than 
     Else 
      Success = False  'Containing "0" as Decimal Points 
     End If 
    End If 
    Return Success 
含有小数点
+0

这个问题被标记为'C#'。这是基本? – mhlester 2014-01-18 07:17:56

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

BEFORE逗号:

^- - 字符串

的开始? - 有可能是零或一个负号

0 - 十进制可能开始与一开始只有一个零...

| - 或...

[1-9] - 具有1任何数字至9

\ d {0,3} - 后跟任何3位数字

AFTER COMMA:

[,。] - 可能有“,”或“。”

\ d {1,2} - 随后用1个或2位数字

(...)? - 零个或一次

$ - 字符串的结束