Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]problem z preg_match
Forum PHP.pl > Forum > Przedszkole
michat34
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?
Pawel_W
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)
michat34
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
droslaw
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]+)*/".
abort
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.
Pawel_W
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.