Regular Extension pomoć

1

Regular Extension pomoć

offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

Treba mi pomoć oko Regex-a. Naime, malo se mučim oko dozvole/zabrane određenih karaktera i simbola.
Treba mi neka pomoć od iskusnijih kolega u ovom polju.
Hoću da profiltriram neke sadržaje i da dozvolim samo slova a-Z, brojeve 0-9 i simbole poput tačke, upitnika, uzvičnika, zareza, zagrada... samo te osnovne stvari:

( -+,.;?"!%:()/*' )

Drugi simboli mi ne trebaju. Kako to da uradim?
Hvala!



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 17 Jun 2012
  • Poruke: 727

Probaj ovaj tutorijal ako je to ono na sto si mislio: Tekst za link



offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

Alien vs Predator ::Probaj ovaj tutorijal ako je to ono na sto si mislio: Tekst za link
Mhm... to je to... Muči me nešto, pokušavam da napravim kvalitetan filter za input form prilikom registracije i pretrage na jednom portalu jer predhodno su neki pokušavali da ubace svakakve HTML, PHP i javaskript pozive u bazu preko $_POST funkcija.

Predhodni programer nije ni razmišljao o takvim stvarima pa je napravio takav kod da si čak mogao umesto slike uploadovati bilo koji fajl, bilo koje ekstenzije. Užas.

Napravio sam filter od HTML, XML i PHP tagova ali nije mi to dovoljno jer može se običnim redoslednim ubacivanjem opet napraviti poziv. Zato sam hteo da ograničim i karakterno. Da dozvolim samo slova i brojeve i još po koji simbol za koji znam da neće škoditi.

Ima li neko rešenje za kvaliteto filtriranje ulaznih stringova?

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3587
  • Gde živiš: 127.0.0.1

Naravno da ima Wink

$filtered = preg_replace("@([^a-zA-Z0-9\+\-_()*!,.;\?:'%/\"]+)@Ui", "", $not_filtered);

offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

Rastafarii ::Naravno da ima Wink

$filtered = preg_replace("@([^a-zA-Z0-9\+\-_()*!,.;\?:'%/\"]+)@Ui", "", $not_filtered);

Hvala ti mnogo! Opet brzo kucaš! Smajli
$filtered = preg_replace("@([^a-zA-Z0-9\+\-_()*!,.;\?:'%/\"]+)@Ui", "$1", $not_filtered);
Radi perfektno! Ziveli

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3587
  • Gde živiš: 127.0.0.1

Nope, ne kucam brzo. Ovaj put sam testirao Wink Evo i objasnjenja:
$filtered = preg_replace("@([^a-zA-Z0-9\+\-_()*!,.;\?:'%/\"]+)@Ui", "", $not_filtered);
Ima sledece znacenje:
Citat:Zameni sve karaktere unutar promenljive $not_filtered koji NE pripadaju definisanom nizu nicim i rezultat smesti u promenljivu $filtered.
Tvoja izmena:
$filtered = preg_replace("@([^a-zA-Z0-9\+\-_()*!,.;\?:'%/\"]+)@Ui", "$1", $not_filtered);
Ima sledece znacenje:
Citat:Zameni sve karaktere unutar promenljive $not_filtered koji NE pripadaju definisanom nizu samim sobom i rezultat smesti u promenljivu $filtered.
I u sustini se svodi na:
$filtered = $not_filtered;
Evo i malog testa:
$test = "test`~!@#$%^&*()_-+="; // trebalo bi da "prezivi" test!%*()_-+ (karakteri: `~@#$^&= nisu dozvoljeni) echo preg_replace("@([^a-zA-Z0-9\+\-_()*!,.;\?:'%/\"]+)@Ui", "$1", $test); // rezultat: test`~!@#$%^&*()_-+= echo preg_replace("@([^a-zA-Z0-9\+\-_()*!,.;\?:'%/\"]+)@Ui", "", $test); // rezultat: test!%*()_-+

Jesi li i dalje siguran da "brzo kucam"? Ziveli

offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

Upravu si, moja greška, izvini. Odličan je kod. Radi perfektno. Hvala ti!

offline
  • PHP programer
  • Pridružio: 26 Okt 2007
  • Poruke: 1063
  • Gde živiš: u Apache

Vidim da ovde dobro riplejsujete. Smile

Imam funkciju s kojom sprečavam da se sajt uruši ako neko unese single quote jedanput, single se unese u bazu ali se sačuva integritet sajta.

function mysql_escape_mimic($inp) {     if(is_array($inp))         return array_map(__METHOD__, $inp);     if(!empty($inp) && is_string($inp)) {         return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $inp);     }     return $inp; }

Problem je ako neko unese npr. u blizini 'Kluza' znači single quote dvaput.

Idealno bi bilo da se navodnici zamene sa slovom ć i uopšte sva naša slova jer kad neko kuca npr., već a nije prebacio na našu tastaturu, sajt se sruši i iskoči syntax error zbog navodnika.

Ili, ako bi barem moglo da se single quote zameni sa double quote.

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3587
  • Gde živiš: 127.0.0.1

Za to ne moras da palis RegExp Wink Dovoljan ti je i addslashes() (posto je mysql_real_escape_string() deprecated od PHP 5.5).

<?php $str = "Is your name O'reilly?"; // Outputs: Is your name O\'reilly? echo addslashes($str); ?>

Ili, u tvom slucaju:

<?php $str = "u blizini 'Kluza'"; // Outputs: u blizini \'Kluza\' echo addslashes($str); ?>

offline
  • PHP programer
  • Pridružio: 26 Okt 2007
  • Poruke: 1063
  • Gde živiš: u Apache

ok hvala, razumeo sam te i znam za mysql escape itd.

Ali nije problem za taj jedan pojam koji je neko uneo, šta kad sledeći korisnik unese npr.,

u blizini 'Vukovog spomenika' pa bi onda trebalo npr.
$str = " '.' "; echo addslashes($str);

Ko je trenutno na forumu
 

Ukupno su 277 korisnika na forumu :: 5 registrovanih, 1 sakriven i 271 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3028 - dana 22 Nov 2019 07:47

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: bojank2, dragoljub11987, Krusarac, Lord Sith, saputnik plavetnila