Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyrażenie regularne w PHP, czy string czy int
KotWButach
post
Post #1





Grupa: Zarejestrowani
Postów: 361
Pomógł: 10
Dołączył: 8.02.2012

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


Witam was, wiem że mogę zrobić to poprzez explode oraz porównać każdą wartość ale nie chcę robić tego w taki sposób. Chciałbym użyć do tego celu wyrażeń regularnych ale mi nie wychodzi.

mam coś takiego

  1.  
  2. $string = "[4, KotWButach, Uczy się]"
  3.  


Chciałbym sprawdzić czy 4 to liczba, czy KotWButach to string oraz czy Uczy się to string

Mam wiec przecinki z którymi nie wiem co zrobić.
Oraz czy da się coś takiego sprawdzić jeżeli miąłbym coś takiego
  1.  
  2. $string = "[4, KotWButach, Uczy się][5, KotNieButach, Nudzi się]"
  3.  



Proszę o pomoc w zrozumieniu zagadnienia.
Go to the top of the page
+Quote Post
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


(\[(\d)+,(.+?),(.+?)\])+?


--------------------
Go to the top of the page
+Quote Post
KotWButach
post
Post #3





Grupa: Zarejestrowani
Postów: 361
Pomógł: 10
Dołączył: 8.02.2012

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


Ta peleryna pod twoim nickiem w pełni zasłużenie smile.gif.

dzięki wielkie smile.gif.
Go to the top of the page
+Quote Post
viking
post
Post #4





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Tyle że ten wzorzec w żaden sposób nie sprawdza typu danych a akceptuje dowolne znaki.
Bardziej coś w stylu \[(\p{N})+,([\p{L} ]+),([\p{L} ]+)\]


--------------------
Go to the top of the page
+Quote Post
KotWButach
post
Post #5





Grupa: Zarejestrowani
Postów: 361
Pomógł: 10
Dołączył: 8.02.2012

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


W sumie po przetestowaniu żadne mi nie działa i wywala błedy sad.gif
używam preg_match

dla takiego kodu mam że wszystko jest dobrze. A przecież nie ma wartości w drugim nawiasie.

  1.  
  2. $string = "[3, asdasd, Uczy się][, asdasd, Uczy się]";
  3.  
  4. var_dump(preg_match("((\[(\d)+,(.+?),(.+?)\])+?)", $string));
  5.  


Ten post edytował KotWButach 7.06.2016, 21:07:19
Go to the top of the page
+Quote Post
Pyton_000
post
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Jest dobrze bo znalazło przynajmniej 1 pasujący wzorzec.
Go to the top of the page
+Quote Post
KotWButach
post
Post #7





Grupa: Zarejestrowani
Postów: 361
Pomógł: 10
Dołączył: 8.02.2012

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


a czy można zrobić tak by w razie gdyby czegokolwiek nie było lub było źle by wywalił false?
Go to the top of the page
+Quote Post
trueblue
post
Post #8





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


((\[(\d)+,(.+?),(.+?)\]){2}?)

: ))


--------------------
Go to the top of the page
+Quote Post
KotWButach
post
Post #9





Grupa: Zarejestrowani
Postów: 361
Pomógł: 10
Dołączył: 8.02.2012

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


Prawie jest.

Staram się jednak zrobić to bardziej elastyczne lecz nie wychodzi

((\[(\d)+,(.+?),(.+?)\]){2}?)
((\[(\d)+,(.+?),(.+?)\]){n}?)

chciałbym by działało dla N "podciągów"
Go to the top of the page
+Quote Post
viking
post
Post #10





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


  1. preg_match_all('/\[(\p{N})+, ([\p{L} ]+), ([\p{L} ]+)\]/u', $string, $out, PREG_SET_ORDER);
  2.  
  3. var_dump($out);


Ten post edytował viking 7.06.2016, 22:24:42


--------------------
Go to the top of the page
+Quote Post
KotWButach
post
Post #11





Grupa: Zarejestrowani
Postów: 361
Pomógł: 10
Dołączył: 8.02.2012

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


Czyli jednak muszę użyć explode by sprawdzić ile jest przebiegów? Bo fnc zwraca tylko te dane, które walidacje przeszły co jest świetne swoją drogą dla dodawania do bazy, ale gorzej dla klasy mającej na celu walidacje danych.

Ten post edytował KotWButach 7.06.2016, 22:56:37
Go to the top of the page
+Quote Post
com
post
Post #12





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


yy, ale przecież dane nie poprawne są danymi nie poprawnymi? Wiec jaki widzisz problem w walidacji?
Go to the top of the page
+Quote Post
KotWButach
post
Post #13





Grupa: Zarejestrowani
Postów: 361
Pomógł: 10
Dołączył: 8.02.2012

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


Nie wiem ile jest iteracji. Skoro zwraca mi powiedzmy 5 z 10 (10 nie jest jawne to tylko przykład) to dalej nie wiem czy cały ciąg jest poprawny czy nie, bo nie wiem ile jest iteracji.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #14





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Kod
$strCount = substr_count($string, '][')+1;
var_dump($strCount);

smile.gif
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 Aktualny czas: 20.08.2025 - 21:00