【发布时间】:2019-05-17 07:14:26
【问题描述】:
我想知道 c# 的正则表达式是否满足以下模式:
- 只允许数字、逗号和数字
- 必须以数字开头和结尾
- 数字范围是0到999
- 数字(例如 1,2,3)或范围(例如 1-3, 2-5)用 ',' 分隔
- 两个 ',' 之间必须是数字或范围
- '-' 必须以数字开头和结尾
- ',' 后只允许 0-1 个空格
示例:
1-100,134,200 --> PASS. Maximum range of numbers 0-999
1,18,100 --> PASS
1, 18, 100 --> PASS. Allow 0-1 white space after ','
1, 18,100 --> FAIL. Due to more than 1 white space after ','
1-,18,100 --> FAIL. Due to no digit after '-'
-2,18,100 --> FAIL. Due to no digit before '-'
1,,18,100 --> FAIL. Due to no digit between ','
1, ,18,100 --> FAIL. Due to no digit between ','
,2,18,100 --> FAIL. Due to no digit before ','
1,18,100, --> FAIL. Due to no digit after ','
我尝试使用以下代码,但它总是返回一个真实的结果:
string pattern = @"[0-9]+(?:-[0-9]+)?(,[0-9]+(?:-[0-9]+)?)*";
string test = @"1-5,13,238,-a";
bool result = Regex.IsMatch(test, pattern);
【问题讨论】:
-
在使用正则表达式时,我总是发现 rubular.com 非常有用,检查一下,它会定义。帮助你。
-
当我使用 regexr.com 验证表达式时它可以工作。但是,当我使用 c# 代码时,它一直返回“true”。除此之外,我也不确定如何限制数字并在其中添加空格表达式,因为我从其他地方复制了表达式。
-
这样的事情可能会起作用:
^(?:\d+(?:-\d+)?,?\s?)+$(编辑:结尾有逗号时不起作用) -
@adiga 您的表达式适用于大多数情况,除了末尾的逗号(您已经指出)和数字范围(0 到 999)。我可以简单地使用 c# 代码进行字符串检查,以检查是否以逗号结尾。谁能知道如何修改 adiga 的表达式以支持范围?
-
aah 没有看到 999 位。将
\d替换为\d{1,3}。