2012-03-09 29 views
18

Sto cercando di sviluppare un'espressione regolare per convalidare una stringa che mi viene in mente come: "TE33" o "FR56" o qualsiasi sequenza che rispetti 2 lettere e 2 numeri.Espressione regolare - 2 lettere e 2 numeri in C#

I primi 2 caratteri devono essere alfabetici e 2 ultimi caratteri devono essere numeri.

Ho provato molte combinazioni e non ho avuto successo. L'ultimo che ho provato:

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

ho sempre risolvere tali difficoltà, su un sito web di test regex poi andare in vsnet con qualcosa che so funziona grazie a test interattivi. –

+5

Un buon sito web di test ti aiuterà con questi, come http://regexhero.net/tester/ –

+0

Funziona bene per me. Come sono esattamente le tue stringhe in arrivo? Stai cercando di abbinare parte di una stringa o quei 4 caratteri sono l'intera stringa? –

risposta

31

Ti manca un'ancora finale.

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

Here's a demo.


EDIT: Se è possibile avere qualcosa tra un iniziale 2 lettere e un finale 2 numeri:

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

Here's a demo.

+0

Questo non dovrebbe importare a meno che non sia davvero necessario rifiutare qualsiasi stringa più lunga del previsto. –

+0

Questo corrisponde anche con l'ancora alla fine, qualcos'altro potrebbe essere il problema. http://ideone.com/wZk6B –

+0

Funziona anche senza $ – ebutusov

4

Questo dovrebbe farti per iniziando con due lettere e finendo con due numeri.

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

Se sai che sarà sempre solo due e due si può

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

Solo per divertimento, ecco un non-regex soluzione (più leggibile/mantenibile per gonzi come me):

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

sembra che io ho frainteso i requisiti. Il seguente codice farà in modo che i primi due caratteri e due caratteri di una convalida della stringa (fintanto che la lunghezza della stringa è> 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

Nota che IsLetter è ** molto ** più ampio di A-Z. Puoi anche usare lo stesso tipo di controllo per le cifre. –

+0

@AlexeiLevenkov, 'A-Z' notato. Non avevo mai usato 'Char.IsNumber' prima. Grazie per l'heads up (codice aggiornato)! –

+0

-1, la soluzione non controlla quanto segue. – Qtax

Problemi correlati