正则表达式匹配仅由一个空格分隔的双精度数

时间:2013-07-18 16:35:18

标签: c# regex

我正在尝试检查匹配项,因为用户在文本框中输入值。

文本框的有效值如下:

"-"

"-5.5"

"-5.5 6.5 7.5"

无效将是

"-5.5   6.5    "

编辑:^ -5.5和6.5之间有多个空格,但由于某种原因它没有显示。

"3.5 "

^(-?)(\d+\.?\d?)\s?(-?\d+\.?\d?)

请记住,负号是此处允许的唯一特殊字符,小数点除外。

感谢。

3 个答案:

答案 0 :(得分:4)

您可以使用:

^-(?:\d+[.]\d+(?:[ ]\d+[.]\d+)*)?$

说明:

^   
  -                   // Match '-'
  (?:                 // An optional non-capturing group
      \d+[.]\d+       // Match pattern - 14.45
      (?:             // A 0 or more times repeating Non-capture group
         [ ]          // A space
         \d+[.]\d+    // Pattern matching - 14.56
      )*              
  )?    
$    

答案 1 :(得分:2)

我认为这就是你要找的东西:

^(-|-?\d+\.?\d?([ ]-?\d+\.?\d?)*)$

这将匹配单个连字符或任意数量的空格分隔的正数或负数,并带有可选的小数点,后面最多一位数。这将允许"5.5 6.5""-5.5 -6.5"等值(您的问题没有说明它是否应与之匹配)

您可以对其进行测试here


<强>更新

这将允许更多匹配,但满足用户键入时支持每个有效序列的新要求。当然,它允许更多,因为无法确定无效输入和输入之间的差异(仅仅是-5 -)。

^(-?(\d+\.?\d?( |$)|$))*$

您可以对其进行测试here

答案 2 :(得分:0)

你可以试试这个:

^(-(\d+\.\d+)*([ ]\d+\.\d+)*)$