2010-08-19 9 views
6

Tengo la necesidad de verificar si las cadenas se adhieren a un formato de ID particular.¿Puedo acortar esta expresión regular?

El formato de la ID es el siguiente:

aBcDe-fghIj-KLmno-pQRsT-uVWxy

una secuencia de cinco bloques de cinco letras mayúsculas o minúsculas, separados por un guión.

que tienen la siguiente expresión regular que funciona:

string idFormat = "[a-zA-Z]{5}[-]{1}[a-zA-Z]{5}[-]{1}[a-zA-Z]{5}[-]{1}[a-zA-Z]{5}[-]{1}[a-zA-Z]{5}"; 

Tenga en cuenta que no hay una pizca de salida, pero la totalidad de los bloques dentro del ID siguen el mismo formato. Por lo tanto, me gustaría poder representar esta secuencia de cuatro bloques con un trazo final dentro de la expresión regular y evitar la duplicación.

He intentado lo siguiente, pero no funciona:

string idFormat = "[[a-zA-Z]{5}[-]{1}]{4}[a-zA-Z]{5}"; 

¿Cómo acortar esta expresión regular y deshacerse de las partes duplicadas?

¿Cuál es la mejor manera de asegurarse de que cada bloque no contenga ningún número?


Editar:

Gracias por las respuestas, ahora entiendo la agrupación en las expresiones regulares.

estoy corriendo algunas pruebas en contra de la expresión regular, aplican los siguientes objetivos:

Prueba 1: aBcDe-fghIj-KLmno-pQRsT-uVWxy
Prueba 2: abcde-fghij-klmno-pqrst-uvwxy

Con la siguiente expresión regular, pasan ambas pruebas:

^([a-zA-Z]{5}-){4}[a-zA-Z]{5}$ 

Con la siguiente expresión regular, prueba de falla 1:

^([a-z]{5}-){4}[a-z]{5}$ 

Varias respuestas han dicho que está bien omitir la A-Z cuando se utiliza a-z, pero en este caso no parece estar funcionando.

Respuesta

6

Si puede configurar las opciones de expresión regular para que no distingan entre mayúsculas y minúsculas, puede reemplazar todas las [a-zA-Z] con solo [a-z]. Además, [-]{1} se puede escribir como -.

Su agrupación se debe hacer con (, ), no con [, ] (aunque se está utilizando correctamente la última hora de especificar los conjuntos de caracteres.

Dependiendo del contexto, es probable que quieren lanzar en ^...$ que coincide inicio y final de la secuencia, respectivamente, para verificar que la totalidad cadena es un partido (es decir, que no hay caracteres adicionales)

en JavaScript, algo como esto:.

/^([a-z]{5}-){4}[a-z]{5}$/i 
+0

Revise la publicación editada, tengo problemas para que la expresión regular funcione solo con a-z en lugar de a-zA-Z – fletcher

+2

@fletcher: debe * especificar * que la expresión regular debe ser insensible a las mayúsculas y minúsculas. cómo lo haces depende de en qué idioma estés haciendo esto. En javascript, es con 'i' como en mi ejemplo, en C# es' nuevo Regex (patrón, RegexOptions.IgnoreCase); 'También hay casos donde * no * puede hacer que no distinga entre mayúsculas y minúsculas, como los controles ASP.NET RegexValidator, que no implementan compatibilidad con RegexOptions, y posiblemente algunos lenguajes de programación que podrían no ser compatibles. –

+0

Problema resuelto. Gracias David – fletcher

7

Usted puede tratar de:

([a-z]{5}-){4}[a-z]{5} 

y que sea sensible a mayúsculas.

+0

Bien, no pensé en el caso insensible. – Benjol

+0

Asegúrate de hacer '^ $' al principio/final; de lo contrario, coincidiría en '1651651aBcDe-fghIj-KLmno-pQRsT-uVWxy1625361 $% 4g $%^£ $ 48';) –

0

Trate

string idFormat = "([a-zA-Z]{5}[-]{1}){4}[a-zA-Z]{5}"; 

es decir, Básicamente reemplazas tus corchetes por paréntesis. Los corchetes no están pensados ​​para agrupar, sino para definir una clase de caracteres aceptados.

Sin embargo, tenga en cuenta que con las versiones acortadas, que puede utilizar la expresión para la validación de la cadena, pero no para su análisis.Si desea procesar los 5 grupos de caracteres, tendrá que ponerlos en 5 grupos:

string idFormat = 
    "([a-zA-Z]{5})-([a-zA-Z]{5})-([a-zA-Z]{5})-([a-zA-Z]{5})-([a-zA-Z]{5})"; 

para que pueda hacer frente a cada grupo y procesarla.

+0

De ninguna manera, solo estaba cambiando el cuadrado corchetes para los paréntesis? – fletcher

1

Esto funciona para mí, aunque es posible que desee comprobar que:

[a-zA-Z]{5}(-[a-zA-Z]{5}){4} 

(un grupo de cinco letras, seguido de [tablero + grupo de cinco letras] cuatro veces)

0
([a-zA-Z]{5}[-]{1}){4}[a-zA-Z]{5} 
Cuestiones relacionadas