2012-01-06 41 views
10

He escrito una expresión regular que debe validar una cadena usando las siguientes reglas:C# Regex Regla de validación usando Regex.Match()

  1. Los cuatro primeros caracteres deben ser alfanumérico.
  2. Los caracteres alfabéticos son seguidos por 6 o 7 valores numéricos para una longitud total de 10 o 11.

lo que la cadena debe tener este aspecto si es válida:

CCCCNNNNNN o CCCCNNNNNNN

C es cualquier carácter y N es un número.

Mi expresión se escribe: @"^[0-9A-Za-z]{3}[0-9A-Za-z-]\d{0,21}$";

Mi código de registro de expresiones regulares se ve así:

var cc1 = "FOOBAR"; // should fail. 
var cc2 = "AAAA1111111111"; // should succeed 

var regex = @"^[0-9A-Za-z]{3}[0-9A-Za-z-]\d{0,21}$"; 

Match match = Regex.Match(cc1, regex, RegexOptions.IgnoreCase); 

if (cc1 != string.Empty && match.Success) 
{ 
    //"The Number must start with 4 letters and contain no numbers.", 
    Error = SeverityType.Error 
} 

Estoy esperando que alguien puede echar un vistazo a mi expresión y ofrecer alguna información sobre mejoras para producir una partido válido.

Además, ¿uso .Match() correctamente? Si Match.Success es true, ¿significa eso que la cadena es válida?

Respuesta

2

Sus condiciones dan:

  1. Los cuatro primeros caracteres deben ser alfanumérico: [A-Za-z\d]{4}
  2. seguido de 6 o 7 valores numéricos: \d{6,7}

ponerlo juntos y anclarlo:

^[A-Za-z\d]{4}\d{6,7}\z 

Aunque depende un poco de cómo se define "alfanumérico". Además, si está utilizando ignorar indicador de caso, puede eliminar el rango A-Z de la expresión.

0

Prueba el siguiente patrón:

@"^[A-za-z\d]{4}\d{6,7}$" 
2

El código siguiente muestra el uso de expresiones regulares:

 var cc1 = "FOOBAR"; // should fail. 
     var cc2 = "AAAA1111111"; // should succeed 
     var r = new Regex(@"^[0-9a-zA-Z]{4}\d{6,7}$"); 
     if (!r.IsMatch(cc2)) 
     { 
      Console.WriteLine("cc2 doesn't match"); 
     } 
     if (!r.IsMatch(cc1)) 
     { 
      Console.WriteLine("cc1 doesn't match"); 
     } 

La salida será cc1 doesn't match.