Gjest Slettet+6132 Skrevet 26. januar 2006 Del Skrevet 26. januar 2006 (endret) Sitter og vimser litt med regex, øynene mine løper snart avgårde av alle tutorials osv Det jeg trenger er å kunne matche en url i denne formen: - Skal starte med http://- Skal følge med enten www, uk, eller us - Et punktum må man ha - Så skal det komme imdb.com/ - Etter det kan det komme hva som helst av alfanumeriske tegn Altså, www.vg.no skal ikke matche. http://www.imdb.com/ skal heller ikke matche, bare med feks http://www.imdb.com/title/tt0107290/. Det jeg har kommet frem til nå er: #(http://){1}(www|uk|us){1}\.imdb\.com/\w+#i Etter det jeg har forstått skal denne matche "http://" en gang, så "www" eller "uk" eller "us" en gang, deretter .imdb.com/ og så hva som helst. Høres dette fornuftig ut, eller roter jeg noe helt grusomt? Vær vennlig og rett meg om jeg har gjort noe feil Forresten, hvilken funksjon må jeg bruke for å få enten true eller false på dette? Om jeg har $string = "www.vg.no"; skal denne returnere false, mens $string = "http://www.imdb.com/title/tt0107290/"; skal returnere true. På forhånd takk EDIT: Etter "\.com/\w+" i regexen må jeg vel ha noe? Slasher er jo ikke alfanumeriske... Endret 26. januar 2006 av Slettet+6132 Lenke til kommentar
nree Skrevet 26. januar 2006 Del Skrevet 26. januar 2006 1/2 offtopic: Hva er regex? Lenke til kommentar
Gjest Slettet+6132 Skrevet 26. januar 2006 Del Skrevet 26. januar 2006 1/2 offtopic: Hva er regex? 5503140[/snapback] Regular expressions. Lenke til kommentar
Loomy Skrevet 26. januar 2006 Del Skrevet 26. januar 2006 (endret) MÅTTE www/us/uk være med eller kunne den være uten? Kom uansett frem til denne (hvis du fjerner ? etter www|uk-delen blir www/uk/us obligatorisk): ------- SELVE REGEX'EN ---------- \b(http://){1}((www\.|us\.|uk\.){1})?imdb\.com\/([a-z0-9/]){2,30} ------------------------------------- ----------------- I PHP ------------ if (eregi('\\b(http://){1}((www\\.|us\\.|uk\\.){1})?imdb\\.com\\/([a-z0-9/]){2,30}', $url)) { // MATCH } else { // IKKE MATCH } ------------------------------------- Endret 26. januar 2006 av Loomy Lenke til kommentar
Gjest Slettet+6132 Skrevet 27. januar 2006 Del Skrevet 27. januar 2006 (endret) MÅTTE www/us/uk være med eller kunne den være uten? Kom uansett frem til denne (hvis du fjerner ? etter www|uk-delen blir www/uk/us obligatorisk): ------- SELVE REGEX'EN ---------- \b(http://){1}((www\.|us\.|uk\.){1})?imdb\.com\/([a-z0-9/]){2,30} ------------------------------------- ----------------- I PHP ------------ if (eregi('\\b(http://){1}((www\\.|us\\.|uk\\.){1})?imdb\\.com\\/([a-z0-9/]){2,30}', $url)) { // MATCH } else { // IKKE MATCH } ------------------------------------- 5504159[/snapback] Takk www|uk|us skulle være obligatorisk ja, så da fjerner jeg "?". Jeg var altså ikke sååå langt på jordet selv da EDIT: Sign. linje 2 Endret 27. januar 2006 av Slettet+6132 Lenke til kommentar
Gjest Slettet+6132 Skrevet 27. januar 2006 Del Skrevet 27. januar 2006 Hmm, får ikke dette til å fungere jeg. Nå ligger dette i loopen min; if($row['imdb']) { $imdb = htmlspecialchars($row['imdb']); if (eregi('\\b(http://){1}((www\\.|us\\.|uk\\.){1})imdb\\.com\\/([a-z0-9/]){2,30}', $row['imdb'])) { echo "<a href=\"$imdb\" title=\"IMDb\" target=\"_blank\"><img src=\"static/img/imdb.gif\" alt=\"IMDb\" /></a>"; } else { echo "<a href=\"$imdb\" title=\"IMDb\" target=\"_blank\"><span style=\"font-size: 7pt; color: #ee3300;\">NOT IMDB</span></a>"; } } else { echo "--"; } Har prøvd både med og uten "?" etter der du sa, men den returnerer fortsatt false. Har prøvd med bare tulleurler som "klfjgjgf" og skikklige som "http://www.imdb.com/title/tt0107290/". Ingenting nytter Lenke til kommentar
Loomy Skrevet 27. januar 2006 Del Skrevet 27. januar 2006 Prøv å bytt ut eregi'en med preg_match('\b(http://){1}((www\.|us\.|uk\.){1})?imdb\.com\/([a-z0-9/]){2,30}/i', $row['imdb']) preg_match() skal visstnok være litt kjappere også.. Lenke til kommentar
Gjest Slettet+6132 Skrevet 27. januar 2006 Del Skrevet 27. januar 2006 (endret) Prøv å bytt ut eregi'en med preg_match('\b(http://){1}((www\.|us\.|uk\.){1})?imdb\.com\/([a-z0-9/]){2,30}/i', $row['imdb']) preg_match() skal visstnok være litt kjappere også.. 5507809[/snapback] Warning: preg_match(): Delimiter must not be alphanumeric or backslash in c:\*\*\*\*\inc\dvd.inc.php on line 47NOT IMDB *Klø meg i "skjegget"* EDIT: preg_match('$(http://){1}((www\\.|us\\.|uk\\.){1})imdb\\.com\\/([a-z0-9/]){2,30}$', $row['imdb']) fungerer, men vil jo ha den case insensitive. Hvordan fikse? EDIT: preg_match('$(http://){1}((www\\.|us\\.|uk\\.){1})imdb\\.com\\/([a-z0-9/]){2,30}$i', $row['imdb']) var løsningen, takk for all hjelp Endret 27. januar 2006 av Slettet+6132 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å