Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Preg_match a dodane wyj±tki
Forum PHP.pl > Forum > Przedszkole
Lethys
Witam,

Mam bardzo prost± walidacje formularzu (tak wiem, że powinienem używać PDO, funkcji prepare itp.)

Ale mi zalezy, żeby zrobić to w preg_match


Chcę przepu¶cić dane w formularzu tylko jeżeli bedzie miało dozwolony znak z preg_matcha:

  1. preg_match('#^[\w\d\s±ćęłńó¶ĽżˇĆĘŁŃÓ¦¬Ż\.\,\?\(\)\:\'\-]*$#is', $nazwa)


problem w tym, że ten preg_match nie działa, tzn. nie puszcza mi mimo wszystko formularza gdy w nazwie jest np. ' albo - (a dodałem to do wyklucoznych znaków)

Jak skonstrułować preg_matcha abym mógł wykluczyć te znaki?


Daimos
na oko, to Twoje wyrażenie brzmi:
^[\w\d\s±ćęłńó¶ĽżˇĆĘŁŃÓ¦¬Ż\.\,\?\(\)\:\'\-] -> wszystko, co nie jest jednym z tych znaków,
* -> dowolny znak
próbowałe¶ dać +, zamiast * ?
+ oznacza dowoln± długo¶ć ci±gu, je¶li jest za nawiasem
Pyton_000
Słabe masz Oko.

^ umie¶ć po [ a nie przed i zamień * na + j.w .

Z Tym że * oznacza 0 lub więcej znaków
a + przynajmniej 1
Lethys
Cytat(Pyton_000 @ 2.06.2015, 11:18:23 ) *
Słabe masz Oko.

^ umie¶ć po [ a nie przed i zamień * na + j.w .

Z Tym że * oznacza 0 lub więcej znaków
a + przynajmniej 1



Mam teraz taki kod:

  1. if(!preg_match('#[^\w\d\s±ćęłńó¶ĽżˇĆĘŁŃÓ¦¬Ż\.\,\?\(\)\:\'\-]+$#is', $nazwa){
  2. $problem = TRUE;
  3. $dodano = 'Użyto nideozolonych znaków';
  4. echo json_encode($dodano);
  5. }


Teraz mi pojazuje problem nawet gdy nie ma zakazanych znaków (próbowałem pregmacth z ! i bez).
Pyton_000
  1. if(preg_match('/[^\w\d\s±ćęłńó¶ĽżˇĆĘŁŃÓ¦¬Ż.,?():\'-]+/', $nazwa)) {
  2. die('niedozwolone znaki');
  3. }
Lethys
Cytat(Pyton_000 @ 2.06.2015, 12:18:44 ) *
  1. if(preg_match('/[^\w\d\s±ćęłńó¶ĽżˇĆĘŁŃÓ¦¬Ż.,?():\'-]+/', $nazwa)) {
  2. die('niedozwolone znaki');
  3. }


Prawie działa, nie chce przepu¶cić tylko '

Znaki jak: ,-. puszcza a tamtego nie chce pu¶cić sad.gif
Pyton_000
zrób var_dump($nazwa) ze stringu i pokaż co tam wkładasz że nie przechodzi.
Może gdzie¶ robisz htmlspecialchars, albo z formularza idzie zakodowane.
Lethys
Cytat(Pyton_000 @ 2.06.2015, 18:57:02 ) *
zrób var_dump($nazwa) ze stringu i pokaż co tam wkładasz że nie przechodzi.
Może gdzie¶ robisz htmlspecialchars, albo z formularza idzie zakodowane.


faktycznie zmienna przepuszczam przez:

  1. $name = mysqli_real_escape_string($con, $_POST['name']);


Jak to mogę dostosować pod ten skrypt?

  1. if(preg_match('/[^\w\d\s±ćęłńó¶ĽżˇĆĘŁŃÓ¦¬Ż.,?():\'-]+/', $nazwa)) {
  2. die('niedozwolone znaki');
  3. }


Pyton_000
nie przepuszczać, skoro akceptujesz tylko takie znaki to raczej nie przejdzie SQLInj
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.