2013-01-24 138 views
0

這應該很簡單,但請耐心等待我。我忽略了什麼?我所要做的就是接受一個屬於SQL查詢的值,我想檢查它是否具有整數值。如果是,那麼我允許它傳遞給SQL Server。我收到一條通知,指出我的Regex方法具有無效參數。提前感謝您瞭解我犯的錯誤。正則表達式正確實現

string valid2Regex = @"\d{4}"; // regex to check for 4 integers 
Regex rgx = new Regex(valid2Regex); 
string idCheck = id; 

if (rgx.Matches(idCheck, rgx)) 
     { 
      parameters.Add(DataAccess.CreateParameter("@YEAR", SqlDbType.NVarChar, HttpContext.Request.QueryString.Get("Year"))); 
     } 

回答

2
^\d{4}$ 

這也限制只是4位數。否則,一個字符串中的任何4位數字都可以與你的一起工作。

此外,there is no instance overload which takes those 2 parameters,而是使用IsMatch:在這種情況下,你看錶達

string match = rgx.Match(idCheck); 

,預計單:

if (rgx.IsMatch(idCheck)) 
{ 
    ... 
+0

@sixlettervariables良好的接觸和感謝。 – OmegaMan

+0

只是想到我把它扔出去[那裏沒有4.5](http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.matches.aspx) – Jeff

+0

偉大的一點!現在調整,但這是我得到的VS與紅色下劃線一起:「REGEX」最好的重載方法有一些無效的論點。這個例子顯示了Matches(string,int),我需要調整其他的東西嗎? – Working

0

談論的語法,可以以不同的方式使用正則表達式結果,es:

expr:"\d{4}" text:"asdfas1234asdfasd" -> "1234" 
expr:"\d{4}" text:"1234"    -> "1234" 
expr:"^\d{4}$" text:"asdfas1234asdfasd" -> null 
expr:"^\d{4}$" text:"1234"    -> "1234" 

如果您只想對車CK如果字符串匹配,你可以使用:

bool found = rgx.IsMatch(idCheck); 

的作品爲:

expr:"\d{4}" text:"asdfas1234asdfasd" -> true 
expr:"\d{4}" text:"1234"    -> true 
expr:"^\d{4}$" text:"asdfas1234asdfasd" -> false 
expr:"^\d{4}$" text:"1234"    -> true 

用來在你的代碼的方法(匹配)發現多個實例,並返回一個MatchCollection:

MatchCollection result = rgx.Matches(idCheck, 0); 

可能你的錯誤是關於第二個參數的,根據MSDN是一個整數並且表示字符串中的起始位置。