特殊情况的正则表达式

时间:2012-10-11 09:38:31

标签: c# regex

我需要为以下场景创建一个正则表达式。

它只能有数字,只能有一个点或逗号。

第一部分可以有一到三个数字。 第二部分可以是点或逗号。 第三部分可以有一到两位数字。

有效方案是

123,12
123.12
123,1
123
12,12
12.12
1,12
1.12
1,1
1.1
1

到目前为止我用这个表达式

来了
\d{1,3}(?:[.,]\d{1,2})?

但效果不佳。例如,输入为11:11被标记为有效。

2 个答案:

答案 0 :(得分:5)

您需要在表达式周围添加anchors

^\d{1,3}(?:[.,]\d{1,2})?$

^将匹配字符串的开头

$将匹配字符串

的结尾

如果缺少这些锚点,它将在你的字符串上部分匹配,因为最后一部分是可选的,意思是“11:11”它可以匹配冒号前的数字,第二个匹配将位于数字之后结肠。

答案 1 :(得分:2)

尝试使用^$

^\d{1,3}(?:[.,]\d{1,2})?$
  

^ 匹配必须从字符串或行的开头开始。

     

$ 匹配必须发生在字符串的末尾,或者在行或字符串末尾的\n之前。