2012-03-09 17 views
18

Próbuję utworzyć wyrażenie regularne w celu sprawdzenia ciągu, który przychodzi mi na myśl: "TE33" lub "FR56" lub jakakolwiek sekwencja z zachowaniem 2 liter i 2 cyfr.Wyrażenie regularne - 2 litery i 2 cyfry w języku C#

Pierwsze 2 znaki muszą być alfabetyczne, a 2 ostatnie znaki muszą być cyframi.

Próbowałem wielu kombinacji i nie odniosłem sukcesu. Ostatni próbowałem:

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

zawsze uporządkować je się na stronie testowej regex następnie przejść do vsnet z czymś, co wiem, działa z interaktywnych testów. –

+5

Dobra strona testowa pomoże Ci z tymi, takimi jak http://regexhero.net/tester/ –

+0

Działa dobrze dla mnie. Jak dokładnie wyglądają twoje przychodzące struny? Czy próbujesz dopasować część ciągu lub czy te 4 znaki to cały ciąg? –

Odpowiedz

31

Brakuje kotwicy końcowej.

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

Here's a demo.


EDIT: Jeśli masz coś pomiędzy pierwszych 2 liter i końcowe 2 numery:

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

Here's a demo.

+0

Nie powinno to mieć znaczenia, chyba że naprawdę musisz odrzucić ciągi dłuższe niż oczekiwano. –

+0

To również pasuje do kotwicy na końcu, może coś innego. http://ideone.com/wZk6B –

+0

To działa nawet bez $ – ebutusov

4

to powinien dostać za zaczynając od dwóch liter i kończąc na dwóch liczbach.

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

Jeśli wiesz, to zawsze będzie tylko dwa i dwa można

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

Tylko dla zabawy, tu jest non-regex (bardziej czytelnym/linkujących do prostaków jak ja) rozwiązanie:

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 
} 

EDIT

wydaje się, że źle zrozumiałem wymagania. Poniższy kod zapewnia, że ​​pierwsze dwa znaki i ostatnie dwa znaki o validate string (tak długo, jak długość łańcucha wynosi> 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

Należy pamiętać, że IsLetter jest ** znacznie ** szerszy niż A-Z. Możesz także użyć tego samego rodzaju sprawdzenia dla cyfr. –

+0

@AlexeiLevenkov, 'Z-Z' zauważyć. Nigdy wcześniej nie użyłem 'Char.IsNumber'. Dzięki za heads up (zaktualizowany kod)! –

+0

-1, rozwiązanie nie sprawdza, co następuje. – Qtax

Powiązane problemy