1

我创建了一个 Windows 窗体,它有 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 这样的情况也是正确的。根据我的预期,这是不正确的。

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

4

1 回答 1

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
于 2013-04-12T06:54:18.530 回答