2012-11-04 100 views
0

我是新來正規表達式,請幫我寫一個新的正則表達式。這應該是工作爲這些:RegEx端口枚舉驗證

28 
28,57,130 
13-18 
13,18-57,65 
44-56,50-130,150,180-213 
12-25,28 
1024-8000,27000-30000 
1024-65535 

它shoudn't爲

15,13 // 13 is less than 15 
15-11 // 11 is less than 15 
15-18,10 
15-18,20,11-130 // because of 11 
0 // port number 0 is reserved and can't be used 
11-180,250,65536 // it should be less than 65535 
+4

正則表達式不適合這個,特別是不適合t第二個列表中數字的比較。如果你只是想檢查你是否有用逗號和/或破折號分隔的數字,正則表達式是好的。 –

+0

@Daniel Persson,現在我明白了,看來我需要使用轉換 –

回答

2

使用regex因爲這將使其更復雜的工作..

而不是使用regex,你可以parse它像這樣

bool matchIt(string input)//returns true|false for a match 
{ 
    if(input=="0")return false;//cuz you dont want to match 0 
    string[] parts=input.Split(new char[] { ',','-' }, StringSplitOptions.None);//split them 
    int prev=int.Parse(parts[0]); 
    foreach(string s in parts) 
    { 
     if(prev>int.Parse(s))return false; 
     prev=int.Parse(s); 
    } 
    return true; 
} 
+0

它應該是分割輸入參數中的「,」,「 - 」(對於我來說編輯太小了......) –

+0

@DanielPersson編輯... ... thxx;) – Anirudha