Cześć,
potrzebuję wyrażenie regularne które będzie przepuszczało wyłącznie dodatnie liczby całkowite, bez pustych lub jakichkolwiek innych znaków, męczę się z tym już kilka godzin i nie mogę sobie poradzić.
z góry dzięki za odpowiedzi :)
Cześć,
potrzebuję wyrażenie regularne które będzie przepuszczało wyłącznie dodatnie liczby całkowite, bez pustych lub jakichkolwiek innych znaków, męczę się z tym już kilka godzin i nie mogę sobie poradzić.
z góry dzięki za odpowiedzi :)
yyy.
/^[0-9]$/
Skoro chcesz TYLKO liczby całkowite, to po cholerę do DOZWOLONYCH znaków dopisujesz jakieś minusy, nawiasy (błędnie zrobione) itp?
PS. javascript != jQuery :/
wcześniej nie miałem do czynienia z podobnymi rzeczami, muszę coś zrobić jednorazowo ale nie mogę poradzić sobie z tym wyrażeniem więc może właśnie dlatego,
var patt1 = new RegExp("^[0-9]$");
z niewiadomych przyczyn w moim przypadku nie działa poprawnie
A nie możesz zrobić porówniania o tak? Bo ja nie wiem co ty tam dalej kombinujesz..
if (zmienna_typu_string.match(/^[0-9]$/)) { alert ('to jest liczba'); }
else { alert('to nie liczba'); }
Brakuje Wam plusika, który oznacza "ten fragment powinien wystąpić jeden lub więcej razy". Wzorzec ^[0-9]$
dopasuje tylko jedną cyfrę.
A taki już zadziała: ^[0-9]+$
.
Zakres znaków [0-9]
można skrótowo zapisać jako \d
(jeśli wzorzec podajemy w literale wyrażenia regularnego, czyli /czymś_takim/; jeśli w stringu, "czyli_tak", to musimy użyć podwójnych beksleszy i napisać \\d
). Literka "d" jak "digit", czyli cyfra.
W sumie więc napisałbym to tak:
var patt1 = /^\d+$/;
Potencjalne minusy takiego wyrażenia:
-dopuszcza liczby z wiodącym zerem, np. 00123
to to samo co 123
. Może to czynić problemy, gdy zero zostanie potraktowane jako sygnalizacja systemu ósemkowego.
-nie pozwala na znaczek plusika z przodu, czyli np. +123
nie przejdzie.
Te problemy jak najbardziej da się rozwiązać, ale nie chciałem mącić nie wiedząc, czy Ci to będzie potrzebne.
Aha: tak jak zasugerował @dzek69, ten temat nie ma NIC, ale to NIC wspólnego z jQuery. jQuery to tylko biblioteka napisana w JavaScripcie. Przydaje się do manipulowania drzewem dokumentu (DOM). Tutaj w ogóle z tego nie korzystamy. Wyrażenia regularne są wbudowane w język JavaScript.
bswierczynski_wylog. napisał(a):
Brakuje Wam plusika, który oznacza "ten fragment powinien wystąpić jeden lub więcej razy". Wzorzec
^[0-9]$
dopasuje tylko jedną cyfrę.A taki już zadziała:
^[0-9]+$
.Zakres znaków
[0-9]
można skrótowo zapisać jako\d
(jeśli wzorzec podajemy w literale wyrażenia regularnego, czyli /czymś_takim/; jeśli w stringu, "czyli_tak", to musimy użyć podwójnych beksleszy i napisać\\d
). Literka "d" jak "digit", czyli cyfra.W sumie więc napisałbym to tak:
var patt1 = /^\d+$/;
Potencjalne minusy takiego wyrażenia:
-dopuszcza liczby z wiodącym zerem, np.00123
to to samo co123
. Może to czynić problemy, gdy zero zostanie potraktowane jako sygnalizacja systemu ósemkowego.
-nie pozwala na znaczek plusika z przodu, czyli np.+123
nie przejdzie.
Te problemy jak najbardziej da się rozwiązać, ale nie chciałem mącić nie wiedząc, czy Ci to będzie potrzebne.Aha: tak jak zasugerował @dzek69, ten temat nie ma NIC, ale to NIC wspólnego z jQuery. jQuery to tylko biblioteka napisana w JavaScripcie. Przydaje się do manipulowania drzewem dokumentu (DOM). Tutaj w ogóle z tego nie korzystamy. Wyrażenia regularne są wbudowane w język JavaScript.
To jest to czego potrzebowałem, dodałem jeszcze eliminowanie liczby zero na początku, poniżej fragment kodu może się komuś przyda
var patt1 = new RegExp("^[^0]\\d+$");
temp = $("#aaa").val();
if (patt1.test(temp)) {
alert("tylko liczby");
}else{
alert("error");
}
@eagl12:
Niestety, po tej ostatniej poprawce jest trochę źle.
Gdy zaczyna się przygodę z regexpami, łatwo wprowadzić do wyrażenia błąd. Dopiero po paru(dziesięciu ;) ) takich błędach możemy się poruszać po regexpach swobodniej.
Wzorzec ^[^0]\\d+$
mówi: od początku (^) do końca ($), ciąg wejściowy ma składać się z:
-jednego, dowolnego znaku nie będącego cyfrą zero ([^0])
-jednej lub więcej cyfr (\d+)
Jak widzisz, ten wzorzec dopasuje np. a1
lub x123
(bo na początku jest nie-zero, a potem cyfry), ale nie dopasuje np. 0
(bo musi się zaczynać od nie-zera) czy 5
(bo musi być nie-zero, a potem coś jeszcze).
To, co chcesz, robiłby wzorzec:
var patt1 = /^(0|[1-9]\d*)$/;
Czyli (znowu, od początku do końca, bo zamykamy całość w ^ oraz $):
-cyfra zero
LUB (|)
-cyfra od jeden do dziewięć i ciąg zero lub więcej cyfr.
Nawiasy w tym wyrażeniu służą do grupowania. Można użyć tzw. grup nieprzechwytujących, odrobinę szybszych, i napisać wyrażenie /^(?:0|[1-9]\d*)$/
.
Zauważ proszę, że używam literału wyrażenia regularnego, a nie konstruktora RegExp. Dobrze jest używać literalu gdy tylko można. Ułatwia pisanie wzorców, bo nie trzeba unieszkodliwiać beksleszy. Dopiero gdy MUSISZ utworzyć wyrażenie dynamicznie, wtedy używaj konstruktora RegExp.