2010-03-15 20 views
5

estoy tratando de coincidir con un SEDOL (exactamente 7 cars: 6 caracteres alfanuméricos seguidos de 1 carácter numérico)Expresión regular: ¿solo coincide con 7 caracteres?

Mi expresiones regulares

([A-Z0-9]{6})[0-9]{1}

partidos cuerdas correctamente, pero más de 7 caracteres que Comience con una coincidencia válida también coincida (si ve lo que quiero decir :)). Por ejemplo:

B3KMJP4

partidos correctamente, pero también lo hace:

B3KMJP4x

que no deben coincidir.

¿Alguien me puede mostrar cómo evitar esto?

+0

4 respuestas exactamente iguales, ¡ahora eso es consistencia! Gracias a todos. – Simon

+2

Además de las respuestas (correctas) a continuación que necesita anclas de inicio/final, necesita eliminar el espacio de su primera clase de caracteres ('A A A 0 'también coincide con su expresión regular). También (para mayor claridad) elimina el innecesario '{1}'. –

+0

@Tim, noto que las cuatro respuestas repiten los dos errores que usted indicó. Debería publicar su propia respuesta, para que Simon pueda aceptarla. –

Respuesta

6

signo de dólar al final de la expresión regular (llamado un ancla) que simboliza el final de la cadena:

^([A-Z0-9]{6})\d$

También he añadido "^" al comienzo que significa comienzo de cuerda y evita juego xB3KMJP4 También simplifiqué la expresión regular original.

Por cierto, según Wikipedia, para el primer personaje, las vocales no se utilizan. No estoy seguro si eso es una regla o una convención.

+0

He eliminado el espacio según el comentario anterior de Tim (Cut'n'paste - la fuente del 78.3% de todos los errores). PERO ... Estoy un poco perdido al verificar realmente si es un personaje válido o no para un SEDOL - "Alfanumérico" puede incluir espacios bajo algunas interpretaciones. Me inclino a creer que la interpretación de Tim es correcta. – DVK

+0

Creo que esto es correcto, ninguno de los cientos de SEDOL que he enumerado comienzan con un carácter vocal. – Simon

5

Es necesario utilizar tanto start y endanchors así:

^([A-Z 0-9]{6})[0-9]{1}$ 

Esto hará coincidir con una cadena que tiene 6 Char alfanumérico + espacio seguido de un dígito. No coincide con una cadena si se encuentra tal como sufijo o prefijo de una cadena más grande.

También usted puede deshacerse de {1} porque [0-9] coincide con un solo dígito por sí mismo.

También \d representa un solo dígito.Por lo que puede acortar su expresión regular de la siguiente manera:

^([A-Z \d]{6})\d$ 
+0

Parece que "A-Z \ d" parece menos legible y fácil de mantener que A-Z0-9. – Aye

+0

+1 para anotar el espacio en la clase char. – Webdev

3
^([A-Z\d]{6})\d$ 
  • Usar^para el inicio de la cadena de
  • $ para el final de la cadena
  • Retire espacio adicional, simplemente se dio cuenta de que uno
  • intercambiado 0-9 con \ d
  • Quitado {1} ya que es redundante
3

Olvidas que la expresión regular coincide con cualquier parte de la cadena. Para arreglarlo, intente esto.

^([A-Z 0-9]{6})[0-9]{1}$ 

^significa coincidir con el comienzo de la cadena, y $ significa hacer coincidir el final de la cadena.

Cuestiones relacionadas