simenss Skrevet 12. oktober 2005 Skrevet 12. oktober 2005 (endret) Finnes det noen funksjon som er virker på samme måte som str_replace, men at man kan legge til begrensninger i hvor mange ganger den skal erstatte strengen? Eks: <?php $limit = 1; $text = str_replace('PHP', NULL, 'PHP ASP PERL CGI PHP ASP PERL CGI PHP ASP PERL CGI', $limit); ?> $text blir da ASP PERL CGI PHP ASP PERL CGI PHP ASP PERL CGI (PHP er fjernet i førsten av $text) Endret 20. november 2005 av simenss
???????? Skrevet 12. oktober 2005 Skrevet 12. oktober 2005 I motsettning til med str_replace kan du sette limit i preg_replace, bruk f.eks.: preg_replace("/PHP/", null, $str, 1);
simenss Skrevet 20. november 2005 Forfatter Skrevet 20. november 2005 Hvorfor ikke: preg_replace("PHP", null, $str, 1); ?
Zic0 Skrevet 20. november 2005 Skrevet 20. november 2005 / / er delimetere som viser alt mellom dem skal søkes etter. Det er mulig å sette flags etter en delimiter, derfor er det viktig å ha /PHP/
simenss Skrevet 20. november 2005 Forfatter Skrevet 20. november 2005 Noen god forklaring på hva flags er?
???????? Skrevet 20. november 2005 Skrevet 20. november 2005 Flags, f.eks.: /PHP/i betyer case insensitive, da ser den etter både php og PHP /g = global /x = extended /s = dotall /m = multiline Hvis du vil lære deg regex er google.com er bra sted å begynne. Søk etter regex tutorial. Grunnen til at refererer deg til google.com er at jeg personlig synes ikke det finnes et absolutt beste sted å lære regex. Det kommer med eksempler og trening.
simenss Skrevet 20. november 2005 Forfatter Skrevet 20. november 2005 (endret) Har sett i noen funksjoner (f.eks. str_replace) at noen bruker merkelige tegn som [@*^] (dette er kun et eksempel). Hva er alle disse tegnene godt for? EDIT: Takker ????? (får ikke skrevet 8 spørsmålstegn), skal se litt nærmere på dette Endret 20. november 2005 av simenss
???????? Skrevet 20. november 2005 Skrevet 20. november 2005 I str_replace() betyr de ingen ting annet enn de tegnene, men i alle regex funksjoner som ereg() og preg...() så betyr de litt av hvert. [a-z] betyr alle bokstaver mellom a og z ^ betyr først, men kan også bety ikke. * betyr 0 eller fler, f.eks. [0-9]* betyr at det enten er ingen, en eller flere tall mellom 0 og 9 etter hverandre. Listen er lang, tror flere inkl. meg har skrevet en liten guide med noen eksempler her på forumet - de funner den hvis du søker. Se også: http://no2.php.net/manual/en/reference.pcr...tern.syntax.php http://www.regularexpressions.info/ http://zvon.org/other/PerlTutorial/Output/index.html http://www.regexlib.com/
simenss Skrevet 20. november 2005 Forfatter Skrevet 20. november 2005 Prøver å forstå dette nå, og har prøvd eksempelet under: <?php $var = 'dette_er-tekst'; if(ereg("^[a-z]+[_-]*$", $var)) { print('TRUE'); } else { print('FALSE'); } ?> Denne koden gir FALSE, noe jeg ikke halt forstår?
???????? Skrevet 20. november 2005 Skrevet 20. november 2005 Det er fordi du søker etter: 1. et eller flere tegn a-z 2. så - eller _ En string som vil validere der er da abcdef_-_- Problemet er det at du har delt det opp i to. Prøv: ^[a-z_\-]+$
simenss Skrevet 20. november 2005 Forfatter Skrevet 20. november 2005 Men på denne siden validerer de e-mail adresser med følgende: ^([0-9a-zA-Z]+[-._+&])*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$ Hvorfor er den uthevede teksten delt i to? Hvorfor ikke: ^([0-9a-zA-Z-._+&]+)*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$
???????? Skrevet 20. november 2005 Skrevet 20. november 2005 ([0-9a-zA-Z]+[-._+&])* Se litt nærmere på den. Der står alt innenfor (), med * som betyr at det finne 0, 1 eller flere av dette der. Dvs den leter etter 0-9a-z+ så regner den med å finne noen av de tegnene, så står det * utenfor ), det betyr at mønsteret kan gjenta seg. [0-9a-zA-Z]+ betyr at aaabbb000111 validerer [-._+&] betyr at de tegnene validerer. Hadde det ikke stått noen )* der så hadde du hatt rett.
simenss Skrevet 20. november 2005 Forfatter Skrevet 20. november 2005 Nå begynner jeg å forstå det Er jo mye bedre å bruke dette til å validere data istede for JavaScript!
simenss Skrevet 20. november 2005 Forfatter Skrevet 20. november 2005 Litt off topic: Hva er egentlig reglene for e-mail adresser? I overnevnt kode er jo -._+& tillatte tegn i e-mail adresser. Trodde ikke + og & var tillatt jeg?
simenss Skrevet 21. november 2005 Forfatter Skrevet 21. november 2005 Jeg prøvde følgende: ^([0-9a-zA-Z]+[-._+&]){5, 15}$ Skulle ikke {5, 15} da sjekke om det innenfor ( ) var mellom 5 og 15 tegn?
???????? Skrevet 21. november 2005 Skrevet 21. november 2005 Du kan ikke ha mellomrom mellom 5, og 15: {5,15}
simenss Skrevet 21. november 2005 Forfatter Skrevet 21. november 2005 Koden under gir uansett FALSE: <?php $var = 'min_tekst'; if(ereg("^([0-9a-zA-Z]+[-._+&]){5,15}[0-9a-zA-Z]+$", $var)) { print('TRUE'); } else { print('FALSE'); } ?>
kakkle Skrevet 21. november 2005 Skrevet 21. november 2005 Denne skal vel funke: <?php $var = 'min_tekst'; if(ereg("^(([0-9a-zA-Z]+[-._+&])*){5,15}[0-9a-zA-Z]+$", $var)) { print('TRUE'); } else { print('FALSE'); } ?> Som da betyr at -._+& ikke nødvendigvis trenger å komme etter 0-9a-zA-z, ettersom jeg har fortsått.
LateFot Skrevet 22. november 2005 Skrevet 22. november 2005 <?php$var = 'min_tekst'; if(ereg("^(([0-9a-zA-Z]+[-._+&])*){5,15}[0-9a-zA-Z]+$", $var)) { print('TRUE'); } else { print('FALSE'); } ?> må man ikke escape . (dot) om man bare vil ha punktum med i strengen man søker i? php.net: . match any character except newline (by default) samme med + den betyr jo en eller flere, om den ikke escapes ( \+ ) så ville ikke koden bli <?php $var = 'min_tekst'; if(ereg("^(([0-9a-zA-Z]+[-\._\+&])*){5,15}[0-9a-zA-Z]+$", $var)) { print('TRUE'); } else { print('FALSE'); } ?>
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå