simenss Skrevet 12. oktober 2005 Del 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 Lenke til kommentar
???????? Skrevet 12. oktober 2005 Del 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); Lenke til kommentar
simenss Skrevet 20. november 2005 Forfatter Del Skrevet 20. november 2005 Hvorfor ikke: preg_replace("PHP", null, $str, 1); ? Lenke til kommentar
Zic0 Skrevet 20. november 2005 Del 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/ Lenke til kommentar
simenss Skrevet 20. november 2005 Forfatter Del Skrevet 20. november 2005 Noen god forklaring på hva flags er? Lenke til kommentar
???????? Skrevet 20. november 2005 Del 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. Lenke til kommentar
simenss Skrevet 20. november 2005 Forfatter Del 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 Lenke til kommentar
???????? Skrevet 20. november 2005 Del 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/ Lenke til kommentar
simenss Skrevet 20. november 2005 Forfatter Del 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? Lenke til kommentar
???????? Skrevet 20. november 2005 Del 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_\-]+$ Lenke til kommentar
simenss Skrevet 20. november 2005 Forfatter Del 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}$ Lenke til kommentar
???????? Skrevet 20. november 2005 Del 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. Lenke til kommentar
simenss Skrevet 20. november 2005 Forfatter Del Skrevet 20. november 2005 Nå begynner jeg å forstå det Er jo mye bedre å bruke dette til å validere data istede for JavaScript! Lenke til kommentar
simenss Skrevet 20. november 2005 Forfatter Del 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? Lenke til kommentar
simenss Skrevet 21. november 2005 Forfatter Del 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? Lenke til kommentar
???????? Skrevet 21. november 2005 Del Skrevet 21. november 2005 Du kan ikke ha mellomrom mellom 5, og 15: {5,15} Lenke til kommentar
simenss Skrevet 21. november 2005 Forfatter Del 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'); } ?> Lenke til kommentar
kakkle Skrevet 21. november 2005 Del 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. Lenke til kommentar
LateFot Skrevet 22. november 2005 Del 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'); } ?> Lenke til kommentar
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å