|
[ NenadS @ 19.06.2007. 16:18 ] @
| Imam problem da napravim funkciju koja ce da radi ono sto pise u naslovu ove teme... a to je da parsira varijablu po odredjenim kriterijumima.
Prvo $var moze da sadrzi sledece karaktere: 0-9 a-z A-Z (space) - + . , : " ' $ & ! ?
Ako sadrzi neki karakter van definisanih onda funkcija treba da ga obrise... i to sve nije problem da nije ovoga...
Na pocetku $var ne smeju da se nalaze karakteri osim 0-9 a-z A-Z a na kraju $var ne sme da ima (space) - + , : " ' & tako da ako se neki od njih nadje na mestu gde ne bi smeo da bude, funkcija treba da ga obrise... i jos jedna stvar...
Odredjeni karakteri smeju da se koriste samo odredjen broj puta... recimo ! samo jednom, + isto jednom, zarez dva-tri puta, . jednom itd...
Ima li neko ideju kako ovo moze da se napise?
Hvala
[Ovu poruku je menjao NenadS dana 19.06.2007. u 18:21 GMT+1]
[Ovu poruku je menjao NenadS dana 19.06.2007. u 18:22 GMT+1] |
[ kelja @ 19.06.2007. 17:37 ] @
Evo jedna, ne bas sjajna ideja, ali izgleda da radi pos'o:
Code:
$str="%%$5----++??&+$5-,,,$'+++";
function parse($varijabla){
$patern="[^0-9a-zA-Z ?:\"'&+,$!.-]";
if(eregi($patern,$varijabla,$match)){
$varijabla=str_replace($match,"",$varijabla);
}
if(eregi("^[^0-9A-Z]",$varijabla,$match)){
$varijabla=str_replace($match,"",$varijabla);
}
if(eregi("[ +,:\"'&-]+$",$varijabla,$match)){
$varijabla=str_replace($match,"",$varijabla);
}
$limit=array(1,1,3,1); //prosiri listu
$chars=array("!","+",",","."); //takodjer
for($i=0;$i<count($chars);$i++){
if(substr_count($varijabla,$chars[$i])>$limit[$i]){
echo "LIMIT!";//ili vec uradi sta zelis...
}
}
echo $varijabla;
}
parse($str);
Hm...zapravo i ne radi bas u potpunosti kako bi trebalo...(neki znaci '$',&'... zezaju na nekim pozicijama)
Evo sad sam nesto sredio...i malko testirao...izgleda da radi, nisam siguran
Sigurno postoje mnogo elegantnija resenja, pa ce se neko vec verovatno javiti sa necim boljim...
[Ovu poruku je menjao kelja dana 19.06.2007. u 19:12 GMT+1]
[ NenadS @ 19.06.2007. 19:08 ] @
Hvala ti, dao si mi ideju za neke stvari tako da sam uspeo da napravim sledece:
Code: $username = " 12$5--F3ff 4f?gS--++!!!!!!&&&& !!!??&+$5-,,,$'+++,";
function format_username($username)
{
$limit = array(1, 1, 3, 1, 1, 1);
$chars = array('!','+',',','.','?','&');
for ($i = 0; $i < count($chars); $i++)
{
if (substr_count($username, $chars[$i]) > $limit[$i])
{
$username = preg_replace('/[' . $chars[$i] . ']+/', '' . $chars[$i] . '', $username);
echo $chars[$i] . '<br />';
}
}
$username = preg_replace('/^[\s\-\+\.,:"\'\$&!\?]+/', '', trim($username));
$username = preg_replace('/[\s\-\+,:"\'&]+$/', '', trim($username));
$username = preg_replace('#\s+#', ' ', trim($username));
if (preg_match('/^[0-9A-Za-z\s(\s|\-|\+|\.|,|:|"|\'|\$|&|!|\?)]+$/', $username))
{
echo 'True<br />' . $username;
}
else
{
echo 'False<br />' . $username;
}
}
format_username($username);
Sad ne znam koliko je to sve ispravno ali znam sta ne radi...
U varijabli imam na 2 mesta po nekoliko uzvicnika... i kroz for petlju oni se obrisu ali tako da na oba mesta ostane po jedan... a to nije dobro... treba samo jedan da ostane na kraju...
Imas li neku ideju za to?
Poz i hvala jos jednom
[ kelja @ 20.06.2007. 12:51 ] @
Hm...
lep zadatak :)
Pretpostavljam da je bitna pozicija karaktera koji ostaje.
Npr, ako se uzvicnik pojavljuje tri puta , a treba samo jednom , uzvicnik ostaje na mestu na kom se PRVI put pojavljuje, a brise se sa preostale dve pozicije?
Ili bi trebalo drugacije da radi?
[ NenadS @ 20.06.2007. 13:08 ] @
Jep bas tako, na prvom mestu na kome se nadje ostaje, a sve ostalo se uklanja... to je deo koji bi mozda i mogao da se odradi, a da ne usporava... a postoji i treci deo koji i ne planiram.. a to je provera gde se koji znak nalazi u samoj poruci ili naslovu... recimo ne sme ., ili :. itd... samo sto je to previse komplikovano i previse kombinacija postoji da bih i to pokusavao... ovo je sasvim dovoljno samo ne znam da li je ta funkcija tj. reg_exp pravilno napisan...
[ kelja @ 20.06.2007. 19:47 ] @
Evo resenja:
Code:
$str='%%$5----.!!++?!!?&.+$5-bb,,,,$5gg+++';
function parse($varijabla){
$patern="[^0-9a-zA-Z ?:\"'&+,!.-]";
if(eregi($patern,$varijabla,$match)){
$varijabla=str_replace($match,"",$varijabla);
}
if(eregi("^[^0-9A-Z]",$varijabla,$match)){
$varijabla=str_replace($match,"",$varijabla);
}
if(eregi("[ +,:\"'&-]+$",$varijabla,$match)){
$varijabla=str_replace($match,"",$varijabla);
}
$limit=array(1,1,3,1); //prosiri listu
$chars=array("!","+",",","."); //takodjer
$broj=array(0,0,0,0);
for($j=0;$j<count($chars);$j++){
for ($i=0;$i<strlen($varijabla);$i++){
if($varijabla[$i]==$chars[$j]){
$broj[$j]++;
if($broj[$j]>$limit[$j]){
$varijabla[$i]="";
}
}
}
}
echo $varijabla;
}
parse($str);
Ne znam sta podrazumevas pod pravilnim pisanjem, ali ako radi - to je to :)
Pozdrav!
[ NenadS @ 20.06.2007. 22:38 ] @
Hvala ti, to cemi svakako biti od koristi :)
Poz i sve najbolje
[ sale83 @ 21.06.2007. 12:34 ] @
Pitanje:
Jel tebi ta funkcija treba bas za USERNAME ????
Ako jeste onda ja ne vidim razlog za toliko komplikovanje oko obicnog username.
1) Ne vidim gde mozes iskoristiti tu funkciju i da bude od koristi.
2) Pa daj je password ne treba toliko da toliko komplikujes sa silnim znakovima i ogranicenjima raznih karaktera koji ce koliko puta da se pojavljuje u stringu.
Ako je sve to oko usernema onda si mogao sda izaberes malo bolju i jednostavniju logiku nego doticnu koju si izabrao.
Izvini ali Ja ne vidim razlog za tolikim komplikovanjem oko istog.
Sve u svemu mislim da postoji mnogo bolja i jednostavnija logika za to sto ti treba od logike koju si izabrao.
PS
OK ako je to SKOLSKI ZADATAK-> dobro dodje za vezbanje dok u svakom drugom slucaju doticni kod nema nikakvu vrednu primenu tj nije vredan.
Poz
sale
[ NenadS @ 21.06.2007. 12:57 ] @
Ne treba mi za username... to cu odraditi jednostavnije, ova funkcija mi treba za title i description, pa ne bih zeleo da se nego glupira i pise sve i svasta... a opet sa druge strane hocu da mu omogucim da moze da iskoristi odredjene karaktere kako bi taj naslov i opis 'lepo' izgledao :)
Mozda moze i jednostavnije ali ja trenutno ne znam drugi nacin da to uradim :(
[ kelja @ 21.06.2007. 13:33 ] @
He, a ja sam bio ubedjen da je u pitanju zadatak. :) Bas je vuklo na to.
A ako nije, ako ti treba za neki konkretan posao, onda mislim da ti, u stvari, i ne treba. :)
Ako su stvarno u pitanju title i description, ne bih se toliko zamarao oko toga (lepo zabrani/dozvoli odredjene karaktere,odradi strip tags i 'escape-uj' varijable, i sta ces vise...)
[ NenadS @ 21.06.2007. 14:18 ] @
Stvarno su u pitanju samo title i description ali ja ne znam kako bi to moglo drugacije i eventualno bolje da se odradi... a da bar deo ovih uslova ispuni...
U principu sve to moze i bez ovoga ali bih onda morao ja rucno da prepravljam te greske da bi to izgledalo 'normalno'... ako neko zna neko prostije resenje, a da pritom i radi posao, voleo bih da to vidim :)
Poz
[ kelja @ 21.06.2007. 15:55 ] @
Ma ok, kod koji sam ti dao radi, samo zelim da kazem da ja nikad ne bih postavljao te(i takve) uslove kad su u pitanju title i description.(A mislim da niko, nigde i nikad i nije postavio takve uslove za 2 polja forme)
Ali, ako tebi bas TO treba, pa koristi ono sto imas, a onda je to i "vredna primena", a i ja bih voleo da vidim resenje krace za nekoliko linija i bolje, sveoubuhvatnije, itd...itd...
[ NenadS @ 21.06.2007. 17:24 ] @
Ebiga, sta da radim kad hocu tako... sto vise stvari automatizujem, manje cu posla imati kasnije oko istih :)
Zasto bih ja recimo editovao svaki naslov ili opis i ispravljao 'gluposti' kada veci deo toga moze da odradi ova funkcija :)
Hvala jos jednom
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|