我创建了一个窗体,有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这样的案例也是正确的。根据我的期望,这是不对的。
你能帮我吗? 提前谢谢了。答案 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