2012-03-09 30 views
18

Estoy tratando de desarrollar una expresión regular para validar una cadena que me viene como "TE33" o "FR56" o cualquier secuencia que respete 2 letras y 2 números.Expresión regular - 2 letras y 2 números en C#

Los primeros 2 caracteres deben ser alfabéticos y 2 últimos caracteres deben ser números.

Probé muchas combinaciones y no tuve éxito. El último que probé:

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

siempre puedo ordenar éstos hacia fuera en un sitio web de pruebas de expresiones regulares y luego entrar en vs.net con algo que sé que funciona a partir de pruebas interactivas. –

+5

Un buen sitio web de pruebas te ayudará con esto, como http://regexhero.net/tester/ –

+0

Me funciona bien. ¿Cómo son exactamente tus cadenas entrantes? ¿Estás tratando de hacer coincidir parte de una cadena o esos 4 caracteres son la cadena completa? –

Respuesta

31

Falta un punto de final de conexión.

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

Here's a demo.


EDIT: Si usted puede tener cualquier cosa entre un período inicial de 2 cartas y una final de 2 números:

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

Here's a demo.

+0

Esto no debería importar a menos que realmente necesite rechazar cualquier cadena que sea más larga de lo esperado. –

+0

Esto también coincide con el ancla al final, otra cosa podría ser el problema. http://ideone.com/wZk6B –

+0

Esto funciona incluso sin $ – ebutusov

4

Esto debe conseguir por comenzando con dos letras y terminando con dos números.

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

Si sabe que siempre será sólo de dos en dos se puede

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

Sólo por diversión, aquí está un no-expresión regular solución (más legible/mantenible por tontos como yo):

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 
} 

EDITAR

parece que me he entendido mal los requisitos. El código siguiente se asegurará de que los dos primeros caracteres y los dos últimos caracteres de una validación de cadena (siempre y cuando la longitud de la cuerda es> 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

Tenga en cuenta que IsLetter ** es ** mucho más amplio que A-Z. También puede usar el mismo tipo de verificación para los dígitos. –

+0

@AlexeiLevenkov, señaló 'A-Z'. Nunca antes había usado 'Char.IsNumber'. Gracias por el encabezado (código actualizado)! –

+0

-1, la solución no verifica lo que sigue. – Qtax

Cuestiones relacionadas