2012-11-07 93 views
2

应该验证这样的事情正则表达式来验证用逗号分隔的数字或破折号

12,14,15,18-20,23,50-130 

我想这一点:

^(?:\\d[,] | \\d[-])$ // or ^(?:\\d[,] | \\d[-] *)$ ?? 

编辑 应该为

12, 15 
11,13, 14,18, 51-52 
工作

它不适用于

w,12 
12,15d 
14,,18 
14--20 
12,12- 
-12,13 
,12 
12, 
13-, 
-,13 
+3

那么,有什么问题? – Oded

+0

什么不应该有效?哪里有更多有效和无效投入的例子? – Oded

+2

这应该验证给定的字符串:'12,14,15,18-20,23,50-130' ;-)如果有任何这样的问题,您不得不举例说明您尝试实现的规则。对于任何给定的例子(或者甚至是一组例子),可以提出一个匹配例子的规则,但是不正确,因为没有列出的东西没有正确匹配。正则表达式用来表达规则,不知道这些规则,你不能创建一个好的正则表达式。 – Chris

回答

2

首先,使用逐字串避免双反斜杠。然后这可能会为你做:

@"^\s*\d+(?:-\d+)?\s*(?:,\s*\d+(?:-\d+)?\s*)*$" 

这将是一个数字,可选后跟连字符号码。然后再任意数量的,,空白和开始模式。

+0

我想'5465,5-45-56'应该匹配 – Anirudha

+0

@ Fake.It.Til.U.Make.It怎么回事?对我来说,这看起来像数字范围的枚举(如打印对话框中的“页面”字段)。 –

0

你也可以试试这个

@"^\s*\d+(\s*[,-]\s*\d+)*\s*$" 
+0

然后你应该注意到,这允许多个连字符之间没有逗号;) –

+0

@ m.buettner可能..但是op从来没有说过关于..:O – Anirudha

+1

这就是为什么我不说你的解决方案是错误的。但是值得一提的是OP,你不觉得吗? –

相关问题