2012-01-06 81 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 } 
相關問題