2012-08-29 14 views

Odpowiedz

8

Problemem jest to, że | ma niższy priorytet niż ^ i $, więc oznacza, że ​​wzorzec ^[1-9]lub0[1-9]lub1[0-9]lub2[0]$: tylko wartości jednocyfrowe są ograniczone przez ^ i tylko 20 jest ograniczony przez $.

można powtórzyć ^ i $ w każdej gałęzi przemienności, albo owinąć przemienności w (?:...) stworzyć non przechwytywania podwyrażenie:

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

(Wziąłem również swobodę zmiany [0] do 0.)

+0

Pomogło mi dzisiaj ... Dzięki :) – AbdulAziz

+0

@AddulAziz: Nie ma za co! :-) – ruakh

3

spróbować

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

0 lub 1 (opcjonalne), a następnie przez co najmniej jedną cyfrę lub 20

+0

To pozwoli 00. Czy to powinno być zabronione? –

+1

Jeśli 00 jest niedozwolone/^ (0 [1-9] | 1 \ d | 20) $/ –

+0

dzięki to działa teraz. –

6

Jak o

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

Problemem jest to, że 20 jest szczególnym przypadkiem. Druga sekcja dotyczy tego. Pierwsza sekcja obejmuje resztę. Zakładam wyrażeń regularnych w stylu perl, ponieważ nie określiłeś kontekstu.

+0

Czy możesz mi powiedzieć, co jest nie tak z moim kodem? Właśnie dziś rano poznałem regex. –

+1

Tak jak określono w odpowiedzi na ruakh, jest to kwestia priorytetowa - musisz ząbkować blok, aby się upewnić, że znaki "^" i "$" mają niższy priorytet niż reszta wyrażenia. –

Powiązane problemy