domingo, 16 de diciembre de 2012

Expresiones Regulares | Reconocer matriculas de coches


Esta Expresión Regular es para reconocer las matriculas de los coches. Como hoy en día hay tanto matriculas antiguas como nuevas (formato europeo), tenemos que hacer una expresión que acepte los dos formatos, respectivamente MU1111AB y E1111ABC. Y no están permitidos los guiones separadores ni espacios en blanco.

Formato antiguo
([A-Z]{1,2}) : Así se cogen letras mayúsculas de la A a la Z, como mínimo puede ser una letra, como máximo pueden ser dos letras.

(\d{4}) : Para coger cuatro dígitos, tienen que ser cuatro, ni uno mas ni uno menos.

([A-Z]{0,2}) : Coger de cero a dos letras mayúsculas, es decir el mínimo es cero y el máximo es dos.

Formato Europeo
(E) : Con E indicamos que forzosamente tiene que haber una y solo una E.

(\d{4}) : Igual que antes, para coger cuatro dígitos.

([A-Z]{3}) : Para coger tres letras mayúsculas, ni una mas ni una menos.


Luego tenemos dos expresiones regulares, una para el formato antiguo y otra para el formato Europeo. Ambas son de la siguiente forma.

Formato antiguo: ([A-Z]{1,2})(\d{4})([A-Z]{0,2})

Formato Europeo: (E)(\d{4})([A-Z]{3})

Para terminar, haciendo una concatenación de ambas podemos aceptar los dos formatos sin problemas.

Una concatenación se hace así: R1|R2

Luego el resultado de la concatenación de las dos expresiones regulares es el siguiente:

(([A-Z]{1,2})(\d{4})([A-Z]{0,2}))|((E)(\d{4})([A-Z]{3})

4 comentarios:

  1. En lugar de concatenar, ¿No será mejor resumir la expresión de la siguiente forma?: ^([A-Z]{1,2})?\d{4}([A-Z]{2,3})$

    ResponderEliminar
  2. No serían válidos. Esas expresiones aceptan matriculas como E2345V (formato europeo), pero tambien matrículas como E2345V34323debfibechibcid

    ResponderEliminar
  3. Matrícula nueva mejorada: (?i)^\d{4}?[ -]*([A-Z]{3})$
    Matricula antigua mejorada: (?i)^([A-Z]{1,2})?[ -]*\d{4}?[ -]*([A-Z]{1,2})$

    ResponderEliminar