2012-01-06 86 views
16

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

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

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

+1

你的表达意味着在字符串中必须有一个数字或破折号。并不是说它只能*包含这些字符而没有别的。 – 2012-01-06 16:26:28

+1

为什么-1?他提出了一个关于不起作用的正则表达式的问题,给出了相关的代码以及他希望实现的功能。 – mynameiscoffey 2012-01-06 17:17:28

回答

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

^意味着比赛要在输入的起点开始,它应该在输入的结束而终止的$

*表示(只读)0或多个数字或破折号应该存在(使用+代替1或更多)。

+0

不应该破折号像这样:'Match match = Regex.Match(input,@“^ [0-9 \ - ] $”);'? – 2012-01-06 16:25:09

+7

不,开始或结束处的短划线('[]')之间是文字短划线,而不是范围字符。 – 2012-01-06 16:26:38

1

你需要逃避第二个破折号。

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

我承认我没有尝试过,但它应该工作。

这实际上只适用于一个字符。如果你想让它需要一个以上的字符,如“123-5”,然后改变你的正则表达式来..

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

正弦第二 - 不能是一个范围它是不必要的逃脱 – 2012-01-06 16:25:47

+0

@rich - 我不知道这是真的,谢谢! – 2012-01-06 16:27:59

9

您正则表达式匹配任何数字或破折号字符串中存在,请尝试以下:

Regex.Match(input, @"^[\d-]+$"); 

^字符串的开始

[\d-]+一个或多个数字或破折号

$字符串结尾

+0

谢谢,它符合我的预期。当我输入一个值时,它不接受说9999K。表达式中的内容不接受任何alpha值? – 2012-01-06 16:33:36

+0

如上所述,正则表示在字符串的开始和结束之间只能存在一个或多个数字或破折号。你允许通过字母的原因是因为你只是验证字符串中是否存在数字或破折号。 '^'和'$'确保我正在检查整个字符串,而不是匹配的任何部分。 – mynameiscoffey 2012-01-06 17:10:36

2

以下任何一种正则表达式都可以正常工作。

[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 
+1

[\ d] + \ - * [\ d] +正是我所期待的。 – 2014-07-01 19:00:32

0

如果这是一个字符串数组,考虑用LINQ完成它?

if (arrInput.Any(s => (!Regex.IsMatch(s, @"^[\d-]+$")))){ //OK } 
相关问题