Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyrażenia regularne (łatwe)
Kmils21
post 18.06.2013, 07:02:00
Post #1





Grupa: Zarejestrowani
Postów: 128
Pomógł: 0
Dołączył: 29.12.2010

Ostrzeżenie: (0%)
-----


Witam, mam tak:
([0-9])
i to jest dowolna liczba od 0 do 9, a jak dać, dowolną liczbę z dowolnego zakresu?

Ten post edytował Kmils21 18.06.2013, 08:35:11


--------------------
Go to the top of the page
+Quote Post
Sephirus
post 18.06.2013, 07:26:35
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat
(...) i to jest dowolna liczba od 0 do 10 (...)


Oj nie... To jest dowolna liczba z zakresu 0 - 9 smile.gif innymi słowy jedna dowolna cyfra. Nie możesz określić konkretnego zakresu jak na przykład 0-1500 smile.gif Ale możesz określić ile minimalnie i maksymalnie może znaleźć się cyfr. Na przykład:

[0-9]+ oznacza minimum jedną cyfrę, maksimum nieokreślone czyli np.: 1, 22, 333, 4444 itd

[0-9]{3,5} oznacza minimum 3 cyfry maksimum 5 czyli np.: 345, 5678, 67890 itp ale już 1 czy 22 nie przejdzie

Ogólny zapis to [znaki]{minimum,maksimum}

Poczytaj o wyrażeniach trochę - źle je chyba rozumiesz smile.gif


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
Damonsson
post 18.06.2013, 08:10:51
Post #3





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Teoretycznie w sumie może, tylko przepuści też "0400"

\b[0-1][0-5][0-9]{1,2}\b

Nie znam się dobrze na wyrażeniach regularnych, więc nie wiem czy można jakoś to jeszcze obejść, żeby nie przepuszczało "0400" itp.
Go to the top of the page
+Quote Post
Sephirus
post 18.06.2013, 08:16:34
Post #4





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


W jakimś "przybliżeniu" może i by się dało - ale to już łamanie głowy smile.gif

Taki zakres 0-1500 nie jest łatwo zobrazować bo wchodzą w grę liczby 1 cyfrowe, 2 cyfrowe, 3 cyfrowe i 4 cyfrowe mniejsze od 1501 - to naprawdę mega zadanie napisać to na regexach smile.gif jedyne co mi przychodzi na myśl to OR'owanie:

Kod
#([0-9])|([123456789][0-9])|([123456789][0-9]{2})|(1[0-4][0-9]{2})|(1500)#


Niby się da...


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
Kmils21
post 18.06.2013, 08:38:01
Post #5





Grupa: Zarejestrowani
Postów: 128
Pomógł: 0
Dołączył: 29.12.2010

Ostrzeżenie: (0%)
-----


Wiem że 0-9, musiałem zrobić literówkę, a raczej liczbówkę haha.gif

Musiałem mieć w innym miejscu błąd i nie działało mi ([0-100]), a taki zakres chciałem. Teraz już działa, niestety nie umiem zlokalizować co zmieniłem.

Dzięki

Ten post edytował Kmils21 18.06.2013, 08:38:25


--------------------
Go to the top of the page
+Quote Post
b4rt3kk
post 18.06.2013, 08:55:45
Post #6





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(Kmils21 @ 18.06.2013, 09:38:01 ) *
Wiem że 0-9, musiałem zrobić literówkę, a raczej liczbówkę haha.gif

Musiałem mieć w innym miejscu błąd i nie działało mi ([0-100]), a taki zakres chciałem. Teraz już działa, niestety nie umiem zlokalizować co zmieniłem.

Dzięki


A co to jest? [0-100]. Owy "zakres" nie polega na stricte zakresie liczbowym, tylko definiuje zakres znaków, które mogą się znaleźć na określonej pozycji ciągu. Tak więc 0-9 jest OK, ale już 0-100 nie ma prawa bytu. Bo oznacza tyle, że możesz wprowadzić liczbę 100 lub 000. 0-1 dopuszcza tylko 0 i 1, natomiast pozostałe dwa znaki muszą być zerami jeśli wprowadzony ciąg ma pasować do wyrażenia.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
markonix
post 18.06.2013, 09:22:38
Post #7





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


A może po prostu:

  1. if ($zmienna > 0 && $zmienna < 10)


sleep.gif


--------------------
Go to the top of the page
+Quote Post
pyro
post 18.06.2013, 11:32:02
Post #8





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


@markonix, doskonały pomysł!

...żeby sprawić, aby coś nie działało.

  1. $zmienna = 'Chcę sprawdzić, czy w stringu poza taką dużą liczbą 3285257878 występuje też mniejsza od 1500, czyli 1450 <----';
  2. if ($zmienna > 0 && $zmienna < 1450)
  3. echo 'jest';
  4. else
  5. echo 'nie ma';


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
Sephirus
post 18.06.2013, 12:00:12
Post #9





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


hehe to ja dorzucę że jeśli to by było tak:

  1. $zmienna = "1450 owiec chodziło po pastwisku";
  2.  
  3. if((int) $zmienna >= 0 && (int) $zmienna <= 1450) echo 'ZGADZA SIĘ!';


to by zadziałało nawet chyba oneeyedsmiley02.png


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
Kmils21
post 18.06.2013, 14:57:27
Post #10





Grupa: Zarejestrowani
Postów: 128
Pomógł: 0
Dołączył: 29.12.2010

Ostrzeżenie: (0%)
-----


Cytat
A co to jest? [0-100]. Owy "zakres" nie polega na stricte zakresie liczbowym, tylko definiuje zakres znaków, które mogą się znaleźć na określonej pozycji ciągu. Tak więc 0-9 jest OK, ale już 0-100 nie ma prawa bytu. Bo oznacza tyle, że możesz wprowadzić liczbę 100 lub 000. 0-1 dopuszcza tylko 0 i 1, natomiast pozostałe dwa znaki muszą być zerami jeśli wprowadzony ciąg ma pasować do wyrażenia.


Zatem zlamiłem. Jak mam to zrobić?


Internety mówią, że może być tak:
Kod
([\d])


Ten post edytował Kmils21 18.06.2013, 15:00:11


--------------------
Go to the top of the page
+Quote Post
b4rt3kk
post 18.06.2013, 15:19:38
Post #11





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(Kmils21 @ 18.06.2013, 15:57:27 ) *
Zatem zlamiłem. Jak mam to zrobić?


Internety mówią, że może być tak:
Kod
([\d])


Nie wiem co chcesz osiągnąć, ale jeśli chcesz za pomocą wyrażenia regularnego znaleźć liczby z zakresu od 0 do 100 to troszkę się z tym pobawisz. Jeśli natomiast służy Ci to wyłącznie do walidacji jakichś pól (np. danych od użytkownika) to PHP i jeden if załatwi sprawę. W jakim celu chcesz znaleźć wyrażeniem regularnym liczbę od 0 do 100?


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
markonix
post 19.06.2013, 18:15:09
Post #12





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Cytat(pyro @ 18.06.2013, 12:32:02 ) *
@markonix, doskonały pomysł!

...żeby sprawić, aby coś nie działało.

  1. $zmienna = 'Chcę sprawdzić, czy w stringu poza taką dużą liczbą 3285257878 występuje też mniejsza od 1500, czyli 1450 <----';
  2. if ($zmienna > 0 && $zmienna < 1450)
  3. echo 'jest';
  4. else
  5. echo 'nie ma';

Czytałem kilka razy - nigdzie nie jest mowa o jakimś stringu zawierającym liczby.
Niech po prostu autor się bardziej określi.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 18:16