我的c#代码中有以下内容 - 我喜欢它做的是检查表达式是否有数字或破折号但没有别的。如果我输入字母K以及短划线或数字,它仍然接受它。我怎么说快递是数字还是破折号:
Match match = Regex.Match(input, @"[0-9-]");
请注意,输入是我传递给评估的文本。
答案 0 :(得分:37)
Match match = Regex.Match(input, @"^[0-9-]*$");
^
表示匹配应从输入的开头开始,$
表示应该在输入结束时结束。
*
表示(仅)0或更多数字或短划线应该在那里(使用+
代替1或更多)。
答案 1 :(得分:10)
您的正则表达式匹配字符串中任何数字或短划线,请尝试以下操作:
Regex.Match(input, @"^[\d-]+$");
^
字符串开头
[\d-]+
一个或多个数字或短划线
$
字符串结尾
答案 2 :(得分:3)
以下任何正则表达式都可以正常工作。
[0-9\-]+ ( + one or more occurance)
[\d\-]+ (as \d represents numbers)
如果你愿意 - 必须在数字之间
[\d]+\-*[\d]+ will match any of following
90909900
9090-9009
900--900
如果你想在数字之间只使用一个 - 或者没有 - , 那么
[\d]+\-?[\d]+ will match any of following
90909900 pass
9090-9009 pass
900--900 fail
答案 3 :(得分:1)
你需要逃离第二个破折号。
Match match = Regex.Match(input, @"[0-9\-]");
我承认我没试过,但它应该有用。
这实际上只适用于一个角色。如果您希望它使用多个字符,例如“123-5”,则将正则表达式更改为..
Match match = Regex.Match(input, @"[0-9\-]+");
答案 4 :(得分:0)
如果这是一个字符串数组,请考虑使用LINQ完成它吗?
if (arrInput.Any(s => (!Regex.IsMatch(s, @"^[\d-]+$")))){ //OK }