2011-06-28 10 views
6

He estado usando [0-9]{9,12} todo el tiempo para indicar que la cadena numérica tiene una longitud de 9 o 12 caracteres. Sin embargo, ahora me di cuenta de que también coincidirá con las cadenas de entrada de longitud 10 u 11. Por eso vine a cabo con la ingenua:¿Es la mejor manera de unir dos repeticiones diferentes de la misma clase de caracteres en una expresión regular?

([0-9]{9} | [0-9]{12}) 

¿Hay una expresión regular más sucinta para representar esto?

Respuesta

7

usted podría ahorrar un carácter utilizando

[0-9]{9}([0-9]{3})? 

pero en mi opinión su forma es mejor porque transmite su intención con mayor claridad. Regexes ya son lo suficientemente difíciles de leer.

Por supuesto puede usar \d en lugar de [0-9].

(Edit: Al principio pensé que podría caer los parens alrededor [0-9]{3} pero no puedes; el signo de interrogación se tendrá en cuenta lo que sólo guarda un carácter, no tres..)

(Edit 2: también será necesario para anclar la expresión regular con ^ y $ (o \b) o re.match() también coincidirá 123456789 dentro 1234567890)

+1

+1 para una mejor legibilidad – tobyodavies

+0

+1 misma respuesta! – Bohemian

1

usted puede hacer esto:.

[0-9]{9}[0-9]{3}? 

No muy diferente es que ...

6

usted podría intentar

(\d{9}\d{3}?) 

para que coincida con 9 y luego un extra opcional 3 dígitos

o

((\d{3}){3,4}) 

para que coincida con 3 o cuatro grupos de 3 dígitos

+1

+1 Me gusta tu creatividad – Bohemian

Cuestiones relacionadas