Regular expression i htaccess regex, PCRE, POSIX, upotreba Apache .htaccess , mod_rewrite |
|
Alati teme | Način prikaza |
12. 03. 2006. | #1 |
Boban Karišik
Expert
|
Text file regexp validator
Imam neki txt file koji izgleda ovako od prilike:
5.000.000 26.000.000 0.00062 5.000.001 72.000.000 0.00059 ... e sada, taj file treba proveriti da ne sadrzi nista drugo osim onoga sto bi trebalo sadrzati... Ja sam napisao ovo, ali ne radi. Evo mog koda: Kôd:
function validateFile($filename) { $file = file($filename); $rows = count($filename); $line = 0; while($line < $rows) { if(preg_match("/\d{1}.\d{3}.\d{3}/",$file[$line])) { $errorMsg .= "Error at line".$line+1."!"; } if(preg_match("/\d{2}.\d{3}.\d{3}/",$file[$line+1])) { $errorMsg .= "Error at line".$line+2."!"; } if(preg_match("/\d{1}.\d{6}/",$file[$line+2])) { $errorMsg .= "Error at line".$line+3."!"; } $line += 3; } return $errorMsg; } Pozdrav i hvala! |
12. 03. 2006. | #2 |
Branimir Momcilovic
Qualified
Datum učlanjenja: 15.02.2006
Lokacija: Beograd
Poruke: 167
Hvala: 47
25 "Hvala" u 8 poruka
|
1) $rows = count($filename); ?
trebalo bi da stoji $rows = count($file) 2) "Error at line".$line+1."!" ovo mozda i radi u nekim verzijama PHP-a, ali nemoj tako da pises, imas string pa konkatenaciju sa integer pa sabiranje integer-a pa opet konkatenaciju... probaj bar nesto ovako: "Error at line". (string)($line+1) . "!" 3) Koliko mi se cini preg_match vraca 1, tj. true kada string zadovoljava regularni izraz koji si poslao, znaci nedostaje ti jedno not u ovim ifovima A pre svega bih predlozio da ovaj fajl struktuiras malo, mozda bi bilo bolje da ima strukturu, npr: 5.000.000;26.000.000;0.00062 5.000.001;72.000.000;0.00059 tako bi izbegao ovaj udarac $line += 3; od kog se jezim... |
12. 03. 2006. | #3 | |
Ivan Dilber
Sir Write-a-Lot
|
Citat:
I uzgred koristite uvek ' ' za stringove koji ne treba da se interpoliraju, upotreba "" na cistom textu je obicno trosenje resursa...
__________________
Leadership is the art of getting people to want to do what you know must be done. |
|
12. 03. 2006. | #4 |
Boban Karišik
Expert
|
OK, hvala, ispravio sam sve sto ste mi rekli i to sada radi...
Imam jos jedno pitanje, da nema neko neku literaturu o regularnim izrazima, jer je na www.php.net ako skrto objasnjeno! |
12. 03. 2006. | #5 |
Boris
Grand Master
Datum učlanjenja: 01.12.2005
Lokacija: Novi Sad
Poruke: 775
Hvala: 5
156 "Hvala" u 2 poruka
|
Literature ima koliko hoces...
http://aspn.activestate.com/ASPN/doc...od/perlre.html Inace, trazis dokumentaciju za PERL Regular Expressions (skraceno "perlre"). Preporucio bih ti simpa programcic za pisanje/testiranje regularnih izraza: The Regex Coach
__________________
"It’s important to have goals when you pet. Otherwise you’re just rubbing another mammal for no reason." - Scott Adams |
12. 03. 2006. | #6 |
Branimir Momcilovic
Qualified
Datum učlanjenja: 15.02.2006
Lokacija: Beograd
Poruke: 167
Hvala: 47
25 "Hvala" u 8 poruka
|
@ivanhoe
Ma radice u PHP-u i 5 + 'mica'. tj. nece javljati error, ali hteo sam da napomenem da takav stil kodiranja moze da dovode do gresaka, kao sto je i bio slucaj. |
12. 03. 2006. | #7 | |
Boban Karišik
Expert
|
Citat:
tnx again |
|
13. 03. 2006. | #8 |
Ivan Dilber
Sir Write-a-Lot
|
sad sam tek pogledao regExpe koje si napisao, imas gresku sto je tacka specijalan znak u RE, znaci "bilo koji karakter", ako zelis bas karakter . onda moras da je escapeujes.
Znaci ako zelis da uhvatis 5.000.000 treba da pises /\d\.\d{3}\.\d{3}/ (znaci 2 stvari se razlikuju: ne treba ti {1} to se podrazumeva kad nista ne napises, i tacke moraju da budu escapeovane...). Ovaj regexp ce da prihvati samo zadati format, dok bi tvoja verzija recimo pristala i na 5A000#000 (odnosno bilo koji drugi karakter na mestu tacke)
__________________
Leadership is the art of getting people to want to do what you know must be done. |
13. 03. 2006. | #9 |
Boris
Grand Master
Datum učlanjenja: 01.12.2005
Lokacija: Novi Sad
Poruke: 775
Hvala: 5
156 "Hvala" u 2 poruka
|
Zapravo, taj regexp (i ne samo taj, vec sva tri, u obliku u kom se nalaze) bi prihvatio recimo i 0000000000000000000000000 bez vecih problema Gledaj da stavljas ^ i $ na pocetak i kraj regexp-a, da bi proveravao izraz od pocetka do kraja reda, a ne samo neki proizvoljni deo gde se zatekne to sto tebi treba.
__________________
"It’s important to have goals when you pet. Otherwise you’re just rubbing another mammal for no reason." - Scott Adams |
13. 03. 2006. | #10 |
Ivan Dilber
Sir Write-a-Lot
|
^ skroz tacno, moj previd...znaci /^\d\.\d{3}\.\d{3}$/
__________________
Leadership is the art of getting people to want to do what you know must be done. |
|
|
Slične teme | ||||
Tema | Početna poruka teme | Forum | Odgovori | Poslednja poruka |
Regexp: Upomoć! | Dušan Dželebdžić | Regular expression i htaccess | 10 | 20. 08. 2007. 02:29 |
W3C redizajnirali validator | Dragan Babić | Opušteno | 1 | 25. 07. 2007. 23:00 |
Odlican validator service | ivanhoe | Web aplikacije, web servisi i software | 7 | 09. 01. 2007. 13:44 |
W3C Validator - ko je ovde lud? | ivanhoe | (X)HTML, JavaScript, DHTML, XML, CSS | 9 | 13. 09. 2006. 22:16 |
Regexp i naša slova | Dragan Babić | Regular expression i htaccess | 7 | 06. 09. 2006. 17:37 |