2012-08-29 13 views

risposta

8

Il problema è che | ha precedenza inferiore ^ e $, in modo che il modello significa ^[1-9]o0[1-9]o1[0-9]o2[0]$: solo valori sola cifra sono limitate da ^, e solo 20 è limitata per $.

È possibile ripetere ^ e $ in ogni ramo della alternanza, oppure avvolgere l'alternanza in (?:...) per creare un non-cattura subexpression:

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

(ho anche preso la libertà di cambiare [0] a 0.)

+0

Oggi mi ha aiutato ... Grazie :) – AbdulAziz

+0

@AbdulAziz: Prego! :-) – ruakh

3

provare questo

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

0 o 1 (opzionale) seguito da almeno una cifra OR 20

+0

Questo consentirà 00. Dovrebbe essere vietato? –

+1

Se 00 non è consentito/^ (0 [1-9] | 1 \ d | 20) $/ –

+0

grazie funziona ora. –

6

stai

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

Il problema è che il 20 è un caso speciale. La seconda sezione lo copre. La prima sezione copre il resto. Sto assumendo espressioni regolari in stile perl, dal momento che non hai specificato il contesto.

+0

Potresti dirmi cosa c'è di sbagliato nel mio codice? Ho appena imparato la regex da solo stamattina. –

+1

Come ruakh ha specificato nella sua risposta, è una cosa prioritaria - dovrai mettere tra parentesi il blocco per assicurarti che i segni "^" e "$" abbiano una priorità inferiore rispetto al resto dell'espressione. –

Problemi correlati