Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]problem z preg_match
michat34
post 4.09.2012, 19:52:19
Post #1





Grupa: Zarejestrowani
Postów: 200
Pomógł: 1
Dołączył: 4.08.2012

Ostrzeżenie: (10%)
X----


witam ten kawalek ma sprawdzac czy uzytkownik poprawnie wpisal w formularz informacje zgodnie z informacja , informacja , infromacja itd...

  1. if (!preg_match('/^([A-Za-z0-9]\,)+$/D', $hobby))


niestety zawsze pokazuje ze sa zle wpisane nawet przy np: sport,gry,muzyka

co jest z nim nie tak?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Pawel_W
post 4.09.2012, 20:02:59
Post #2





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


to Ci zadziała dla takiej wartości: sport,

żeby było uniwersalne, rozbij zmienną na tablicę za pomocą explode (jako argument podaj przecinek), następnie przeleć po tablicy i sprawdzaj każdy element za pomocą Twojego wyrażenia (tylko usuń z niego ten przecinek)
Go to the top of the page
+Quote Post
michat34
post 4.09.2012, 20:09:48
Post #3





Grupa: Zarejestrowani
Postów: 200
Pomógł: 1
Dołączył: 4.08.2012

Ostrzeżenie: (10%)
X----


hm a niedaloby sie zrobic tego prosciej tj. tak jak teraz chce? czemu nie działa danie tego w nawias? specjalnie tak to zrobilem bo w wikibooksach pisali ze taki trik pozwala operowac na ciagu, np (abc)+ akceptuje abc, abcabc, abcabcabc...

PS
sprawdzilem wlasnie i dla sport, tez wywala blad :P

Ten post edytował michat34 4.09.2012, 20:12:14
Go to the top of the page
+Quote Post
droslaw
post 4.09.2012, 21:00:59
Post #4





Grupa: Zarejestrowani
Postów: 98
Pomógł: 33
Dołączył: 10.05.2011
Skąd: Krak

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


Najlepiej jest to zrobić tak jak Pawel_W napisał, bo i tek musisz to potem rozbić. Napisu "sport," nie dopasuje, bo Twój wzorzec pasuje do napisów, w których pojedyńcze litery są oddzielone przecinkiem. Rozwiązanie wyglądałoby jakoś tak "/^([a-zA-Z]+)(, *[a-zA-Z]+)*/".

Ten post edytował droslaw 4.09.2012, 21:01:46
Go to the top of the page
+Quote Post
abort
post 4.09.2012, 21:15:15
Post #5





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

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


Bo wyrażenie jest źle napisane. tongue.gif Polećmy po kolei:
1. W nawiasach kwadratowych masz litery (małe i wielkie) i cyfry - dopasuje do wzorca wtedy, gdy jeśli znajdzie JEDEN Z WYMIENIONYCH ZNAKÓW (jeden, nie "wiele" - dla "wiele" trzeba użyć np. magicznego plusa, albo konstrukcji {2,5})
2. Za nawiasem kwadratowym masz przecinek (backslash imho niepotrzebny)
3. Wszystko to masz wzięte w nawias okrągły (czyli grupowanie - naprawdę potrzebujesz grupowania?)
4. Za nawiasem okrągłym masz "+" (dopasuj do jednego lub więcej wystąpień).


No i wyrażenie dopasuje, ale tylko do JEDNEJ LITERY LUB CYFRY oddzielonej przecinkiem. Który to ciąg może wystąpić wielokrotnie.

Tobie byłoby poptrzebne imho coś takiego:

1. '/[0-9A-Za-z]+,*/' - NIEZEROWY (min. 1 znak) ciąg liter i cyfr zakończony OPCJONALNYM ('*') przecinkiem
2. '/[0-9A-Za-z,]+/' - niezerowy (j.w) ciąg znaków składających się z liter, cyfr i przecinka
3. lub wręcz (jeśli dopuszczasz stosowanie "_")... '/\w+,*/' (a to jako ćwiczenie odszyfruj sam - pod hasłem "PCRE regex syntax" lub "pattern syntax")

Pisane na kolanie, poeksperymentuj.
Go to the top of the page
+Quote Post
Pawel_W
post 5.09.2012, 08:34:50
Post #6





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


to jest niemożliwe do wykonania w ten sposób wink.gif gdzie masz niby powtarzanie tych sekwencji? dalej zadziała tylko i wyłącznie dla 1 wpisu
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: 14.08.2025 - 05:01