2012-03-09 59 views
18

我想開發一個正則表達式來驗證一個字符串,它來自我:「TE33」或「FR56」或任何關於2個字母和2個數字的序列。正則表達式 - C中的2個字母和2個數字#

前2個字符必須是字母,最後2個字符必須是數字。

我嘗試了很多組合,但沒有成功。我試過的最後一個:

if(Regex.IsMatch(myString, "^[A-Za-z]{2}[0-9]{2}")){ 
} 
+0

我總是整理這些了上一個正則表達式的測試網站,那麼進入vs.net與我所知道的東西從互動測試中工作。 – 2012-03-09 18:57:54

+5

一個好的測試網站會幫助你,例如http://regexhero.net/tester/ – 2012-03-09 18:59:57

+0

適合我的作品。你的傳入字符串究竟是什麼樣的?你想匹配一個字符串的一部分還是4個字符的整個字符串? – 2012-03-09 19:00:07

回答

31

你錯過了一個結束錨點。

if(Regex.IsMatch(myString, "^[A-Za-z]{2}[0-9]{2}\z")) { 
    // ... 
}

Here's a demo.


編輯:

if(Regex.IsMatch(myString, @"^[A-Za-z]{2}.*\d{2}\z")) { 
    // ... 
}

Here's a demo.

+0

這應該不重要,除非您確實需要拒絕比預期時間長的字符串。 – 2012-03-09 19:03:04

+0

這也與最後的錨點相匹配,其他的東西可能就是這個問題。 http://ideone.com/wZk6B – 2012-03-09 19:03:13

+0

即使沒有$ – ebutusov 2012-03-09 19:03:17

4

這應該讓你:如果你能初始2個字母和最後2個數字之間有什麼從兩個字母開始,以兩個數字結尾。

[A-Za-z]{2}(.*)[0-9]{2} 

如果你知道它永遠是隻有兩個和兩個可以

[A-Za-z]{2}[0-9]{2} 
4

只是爲了好玩,這裏是一個非正則表達式(更可讀/維護對於我這樣的傻瓜)解決方案:

string myString = "AB12"; 

if(Char.IsLetter(myString, 0) && 
    Char.IsLetter(myString, 1) && 
    Char.IsNumber(myString, 2) && 
    Char.IsNumber(myString, 3)) { 
    // First two are letters, second two are numbers 
} 
else { 
    // Validation failed 
} 

編輯

看來我我誤解了這些要求。下面的代碼將確保前兩個字符,最後兩個字符的字符串驗證的(只要該字符串的長度> 3)

string myString = "AB12"; 

if(myString.Length > 3) {  
    if(Char.IsLetter(myString, 0) && 
     Char.IsLetter(myString, 1) && 
     Char.IsNumber(myString, (myString.Length - 2)) && 
     Char.IsNumber(myString, (myString.Length - 1))) { 
     // First two are letters, second two are numbers 
     } 
     else { 
     // Validation failed 
    } 
} 
else { 
    // Validation failed 
} 
+0

請注意,IsLetter比A-Z更廣泛**。您也可以使用相同種類的數字檢查。 – 2012-03-09 19:08:18

+0

@AlexeiLevenkov,'A-Z'指出。我以前從未使用過「Char.IsNumber」。感謝您的支持(更新代碼)! – 2012-03-09 19:10:09

+0

-1,解決方案不檢查後面的內容。 – Qtax 2012-03-09 19:13:54

相關問題