正则表达式,用于检查在文本框中输入的文本是否包含数字,逗号和连字符

时间:2013-04-12 06:50:02

标签: c# regex

我创建了一个窗体,有2列文本框 - 行范围和总行数。我想检查行的文本框范围,以确保输入的数据只包含正确格式的数字,逗号和连字符 - 也就是说,它可以是这样的:10-20,30-40,50 60,70年代。但是不应该允许除此之外的任何事情。

基本上我想用“行数范围”文本框中的可用数据自动填充“总行数”文本框。所以在上面的例子中,计数将是 - (20减10)+(40减30)加1(对于第50行)加1(对于第60行)加1(对于第70行)= 23。

我尝试过类似的事情:

string reg = @"^([0-9]+([,][0-9]+))* |([0-9]+([.\u2013-][0-9]+))$";

但这也证实了像10-20-30这样的案例也是正确的。根据我的期望,这是不对的。

你能帮我吗? 提前谢谢了。

1 个答案:

答案 0 :(得分:1)

每个组件的可能格式为:

\d+-\d+
\d+

我们可以将它们组合在一起,因为它们具有相同的结构:

\d+(-\d+)?

由分隔符分隔的几个X的常用正则表达式是

X(,X)*

因此我们可以构建最终的正则表达式,其中至少有一个组件以逗号分隔:

^\d+(-\d+)?(,\d+(-\d+)?)*$

快速PowerShell测试:

PS> '50,60','10-20','1,2-5,7','10-20,30-40,50,60,70','10-20-30' -match '^\d+(-\d+)?(,\d+(-\d+)?)*$'
50,60
10-20
1,2-5,7
10-20,30-40,50,60,70