jQuery wyrażenie regularne

0

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 :)

0

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 :/

0

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

0

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'); }
0

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.

0
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 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.

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");
					}
1

@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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1