Chcę, aby użytkownikowi wprowadzanie liczb w zakresie 0-20, a może oboje wejdą 01 i 1wyrażenie regularne, aby umożliwić tylko cyfry w przedziale 1-20
to, co mam tak daleko
/^[1-9]|0[1-9]|1[0-9]|2[0]$/
ale to nie działa.
Chcę, aby użytkownikowi wprowadzanie liczb w zakresie 0-20, a może oboje wejdą 01 i 1wyrażenie regularne, aby umożliwić tylko cyfry w przedziale 1-20
to, co mam tak daleko
/^[1-9]|0[1-9]|1[0-9]|2[0]$/
ale to nie działa.
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
.)
spróbować
/^([01]?\d|20)$/
0 lub 1 (opcjonalne), a następnie przez co najmniej jedną cyfrę lub 20
To pozwoli 00. Czy to powinno być zabronione? –
Jeśli 00 jest niedozwolone/^ (0 [1-9] | 1 \ d | 20) $/ –
dzięki to działa teraz. –
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.
Czy możesz mi powiedzieć, co jest nie tak z moim kodem? Właśnie dziś rano poznałem regex. –
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. –
Pomogło mi dzisiaj ... Dzięki :) – AbdulAziz
@AddulAziz: Nie ma za co! :-) – ruakh