Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] preg_match (PROSTE)
koziet
post 2.04.2009, 15:17:10
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 16.12.2008
Skąd: Dublin - Ireland

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


Dla kogoś kto jest obcykany w temacie to będzie śmiesznie proste ale ja nie korzystałem dotychczas z preg_match i proszę o pomoc. Mam ciąg znaków, który powinien składać się wyłącznie z cyrf oraz znaków przecinka, np. "34,5,15,6,122,10,1,8".
Ponadto pierwszy i ostatni znak powinny być cyframi.
Jak napisać pod to preg_match ?
Go to the top of the page
+Quote Post
bim2
post 2.04.2009, 15:22:26
Post #2





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


A nie możesz wykorzystać explode" title="Zobacz w manualu PHP" target="_manual?

Ten post edytował bim2 2.04.2009, 15:22:33


--------------------
Go to the top of the page
+Quote Post
zzeus
post 2.04.2009, 15:29:48
Post #3





Grupa: Zarejestrowani
Postów: 441
Pomógł: 71
Dołączył: 3.09.2007
Skąd: wrocław

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


Nie jestem pewny ale spróbuj coś takiego

  1. <?php
  2. "/^[0-9]{1}([0-9],)+[0-9]{1}$/"
  3. ?>


Ten post edytował zzeus 2.04.2009, 15:30:18


--------------------
Go to the top of the page
+Quote Post
koziet
post 2.04.2009, 16:08:32
Post #4





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 16.12.2008
Skąd: Dublin - Ireland

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


Cytat(bim2 @ 2.04.2009, 15:22:26 ) *


A co w przypadku gdy ciąg będzie taki: "2,45,64,d3,aaa,dupa|1" ?

Sorry, zapomniałem dodać, że ciąg może się również składać z pojedynczej cyfry lub liczby i też będzie poprawny więc poprawne będzie np: "3,67,1,8" ale też samo "3" lub "333"
Go to the top of the page
+Quote Post
pyro
post 2.04.2009, 16:09:25
Post #5





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

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


dalej explode ;p + ewentualnie filtr tablicy smile.gif


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
koziet
post 2.04.2009, 16:13:11
Post #6





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 16.12.2008
Skąd: Dublin - Ireland

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


Nie chcę explode. Chcę preg_match.
Zapomniałem jeszcze dodać, że prawidłowy ciąg może się również składać z pojedynczej cyfry lub liczby. Czyli poprawne będzie np: "1,34,8,99,121" ale też "3" lub "333"
Niepoprawne będzie np: ",1,34,8,99,121" - "333," - "4,5,6,a" - ""
Go to the top of the page
+Quote Post
bim2
post 2.04.2009, 16:27:21
Post #7





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


Takim tonem "Nie chce... Chce" i żądania później to w dziale ofert. Nie tutaj. Pokaż co napisałeś, a pokażemy błąd.


--------------------
Go to the top of the page
+Quote Post
ikssde
post 2.04.2009, 16:30:39
Post #8





Grupa: Zarejestrowani
Postów: 217
Pomógł: 40
Dołączył: 20.08.2008

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


Ale ignorant, przecież rozbić ten ciąg explode i potem sprawdzić każdą komórkę otrzymanej tablicy pod względem poprawności będzie o wiele prościej.
Go to the top of the page
+Quote Post
koziet
post 2.04.2009, 16:31:49
Post #9





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 16.12.2008
Skąd: Dublin - Ireland

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


To nie miało być "takim tonem". Po prostu uważam, że w tym przypadku preg_match będzie dużo bardziej elegancka niż rozwalanie ciągu za pomocą explode i badanie każdego elementu.

Po co mam pisać kilka linii kodu jak wystarczy jedna, która jest czytelniejsza i wydajniejsza.

Myślę, że wystarczająco opisałem problem.
Nie pokażę co napisałem bo nic nie napisałem. Opisałem problem i czekam aż jakaś mądra głowa pomoże mi go rozwiązać.

Ten post edytował koziet 2.04.2009, 16:34:19
Go to the top of the page
+Quote Post
ikssde
post 2.04.2009, 16:51:56
Post #10





Grupa: Zarejestrowani
Postów: 217
Pomógł: 40
Dołączył: 20.08.2008

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


Nie wiem jak chcesz to zrobić skoro nie wiesz ile takich elementów będziesz miał, jakieś propozycje?
Go to the top of the page
+Quote Post
koziet
post 2.04.2009, 20:22:45
Post #11





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 16.12.2008
Skąd: Dublin - Ireland

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


Skoro nie wiesz to po co nabijasz sobie punkty na forum?

A co do propozycji to wystarczy określić warunek, że pierwszy i ostatni znak w ciągu muszą być cyframi [0-9] a wszystko co pomiędzy nimi to albo cyfry albo znak przecinka tylko, że nie wiem jak utworzyć taki pattern dla preg_match()

Już sam sobie poradziłem:
  1. <?php
  2. $pattern = "/^[0-9][0-9,]*[0-9]$/";
  3. $string  = "92,8,3,7,66,345";
  4.  
  5. if (preg_match($pattern, $string)) {
  6.   echo 'tak';
  7. }
  8. else {
  9.   echo 'nie';
  10. }
  11. ?>


Ten post edytował koziet 2.04.2009, 20:28:07
Go to the top of the page
+Quote Post
nospor
post 2.04.2009, 20:51:58
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Ale ignorant, przecież rozbić ten ciąg explode i potem sprawdzić każdą komórkę otrzymanej tablicy pod względem poprawności będzie o wiele prościej.
ignorant to moze jestes ty.... poto wymyslono wyrazenia regularne by w latwy sposob sprawdzic tekst a nie bawic sie w kombinacje z explode , latanie w petli po elementach i sprawdzanie kazdego po kolei.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
megawebmaster
post 3.04.2009, 16:57:51
Post #13





Grupa: Zarejestrowani
Postów: 143
Pomógł: 17
Dołączył: 8.11.2008
Skąd: Libiąż

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


Który i tak trzeba byłoby sprawdzić w preg_match'em :]
Go to the top of the page
+Quote Post
szagi3891
post 4.04.2009, 09:46:23
Post #14





Grupa: Zarejestrowani
Postów: 109
Pomógł: 9
Dołączył: 12.03.2007
Skąd: kraków/tarnobrzeg/baranów/suchorzów

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


Ja bym natomiast zaproponował wyrażenie :
#^[0-9]([0-9,]*[0-9])?$#si

Obejmuje ono również przypadki gdu nie ma żadnego przecinka. Można to szybko sprawdzić uruchamiają poniższy skrypt :

  1. <?php
  2. print "<pre>";
  3. $dane = array();
  4.  
  5. $dane[] = '34,5,15,6,122,10,1,8';
  6. $dane[] = '34,5,15,6,122,10,1.8';
  7. $dane[] = '34,5,15,6,1g22,10,1,8';
  8. $dane[] = '34,5,1dfgfd5,6,122,10,1,8';
  9. $dane[] = '34,5,15,6,122,10gdfg,1,8';
  10. $dane[] = '34,5,15,6,dfgfdgd122,10,1,8';
  11. $dane[] = '34,5,15,6,122,10,1,8,';
  12. $dane[] = '3aasasas,5,15,6,122,10,1,8,';
  13. $dane[] = '34,5,15a,6,122,10,1,8,';
  14. $dane[] = 'ę34,5,15,6,122,10,1,8,';
  15. $dane[] = '34,5,15,6,1sdfsdfsd22,10,1,8,';
  16. $dane[] = '34,5,1225,12126,122,121120,11232,8';
  17. $dane[] = '3,8';
  18. $dane[] = '3';
  19. $dane[] = '3.0';
  20.  
  21.  
  22. foreach ($dane as $key => $val) {
  23.    
  24.    if (preg_match('#^[0-9]([0-9,]*[0-9])?$#si', $val))
  25.        print 'ok ';
  26.    else
  27.        print '.. ';
  28.  
  29.  
  30.    if (preg_match('#^[0-9][0-9,]*[0-9]$#si', $val))
  31.        print 'ok ';
  32.    else
  33.        print '.. ';
  34.  
  35.        
  36.    print '- ' . $val . "\n";
  37.    }
  38.  
  39. print "</pre>";
  40. ?>


--------------------

Każdy z was jest łodzią w której
Może się z potopem mierzyć
Cało wyjść z burzowej chmury
Musi tylko w to uwierzyć!
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: 20.07.2025 - 01:59