c#Regex仅用于数字和短划线

时间:2012-01-06 16:21:34

标签: c# regex

我的c#代码中有以下内容 - 我喜欢它做的是检查表达式是否有数字或破折号但没有别的。如果我输入字母K以及短划线或数字,它仍然接受它。我怎么说快递是数字还是破折号:

     Match match = Regex.Match(input, @"[0-9-]");

请注意,输入是我传递给评估的文本。

5 个答案:

答案 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 }