2012-08-29 17 views

Respuesta

8

El problema es que | tiene menor precedencia que ^ y $, por lo que significa que su patrón de ^[1-9]o0[1-9]o1[0-9]o2[0]$: sólo los valores de un solo dígito están restringidos por ^, y sólo 20 está restringida por $.

puede repetir ^ y $ en cada rama de la alternancia, o bien envolver la alternancia en (?:...) para crear un no-captura subexpresión:

/^[1-9]$|^0[1-9]$|^1[0-9]$|^20$/ 
/^(?:[1-9]|0[1-9]|1[0-9]|20)$/ 

(También he tomado la libertad de cambiar [0] a 0.)

+0

Me ayudó hoy ... Gracias :) – AbdulAziz

+0

@AbdulAziz: ¡De nada! :-) – ruakh

3

probar esto

/^([01]?\d|20)$/ 

0 o 1 (opcional) seguido por al menos un dígito o 20

+0

Esto permitirá 00. ¿Debería prohibirse eso? –

+1

Si 00 no está permitido/^ (0 [1-9] | 1 \ d | 20) $/ –

+0

gracias, funciona ahora. –

6

Cómo sobre

/^([0-1]?[0-9]|20)$/ 

El problema es que 20 es un caso especial. La segunda sección lo cubre. La primera sección cubre el resto. Asumo expresiones regulares estilo perl, ya que no especificó el contexto.

+0

¿Podría decirme qué ocurre con mi código? Acabo de aprender la expresión regular por mi cuenta esta mañana. –

+1

Como ruakh especificó en su respuesta, es una cuestión prioritaria: tendrá que poner entre paréntesis el bloque para asegurarse de que el signo '^' y '$' tienen una prioridad menor que el resto de la expresión. –

Cuestiones relacionadas