Gå til innhold

regulære uttrykk, sjekke om input er url


Anbefalte innlegg

Hei

jeg har forsøkt å lese litt om regulære uttrykk, men mesteparten er litt gresk for meg, kan en si.

 

Jeg har laget dette mønsteret: /^http:\/\/\w+$/

 

Og jeg tror jeg sier at "hvis input starter (^) på http:// og etterfølges av bokstaver, en til mange og slutter på bokstaver" så har jeg en match.

 

Men det funker ikke. Alle lenkene mine blir mailto-lenker:/

 

if(preg_match("/^http:\/\/\w+$/", $result['url'])){
 	$link = "<a href=\"{$result['url']}\">{$result['name']}</a>";
 }else if(strcmp($result['url'], "")==0){
 	$link = "";
 }else{
 	$link = "<a href=\"mailto:{$result['url']}\">{$result['name']}</a>";
 	
}

Lenke til kommentar
Videoannonse
Annonse

\w A single word character - alphanumeric and underscore.

 

\w tar altså bare alfanumeriske karakterer, og vil ikke fungere på f.eks. www.vg.no, siden denne adressen inneholder punktum. Så om du bytter ut \w med noe som inkluderer punktum, bør uttrykket ditt fungere.

Lenke til kommentar

Det spørs litt hva slags URL'er som skal godtas, for man kan jo putte nesten hva som helst i en url, f.eks. %[nummer], /, ?, =, osv.

Denne tillater kun selve domenet (tror jeg), kan utvide når jeg vet litt mer nøyaktig hva du vil tillate:

(?<=http://)[a-zA-Z0-9æøåÆØÅ.\-_]+

Lenke til kommentar
\w A single word character - alphanumeric and underscore.

 

\w tar altså bare alfanumeriske karakterer, og vil ikke fungere på f.eks. www.vg.no, siden denne adressen inneholder punktum. Så om du bytter ut \w med noe som inkluderer punktum, bør uttrykket ditt fungere.

7268744[/snapback]

 

Hmm, ja- det var jammen ikke lett :(

 

Men du satte meg vel inn på riktig spor. En url inneholder mye mer enn bare bokstaver (eks / og . og _ og ~)

Lenke til kommentar

Jeg fant denne på Zend.com. Jeg synes den var ganske enkel og komplett.

/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\//i

 

Men jeg skjønner ikke hva det siste leddet gjør:

(:(\d+))?

 

Det ser forresten ut som at de har utelatt ~, ?, = og andre variabelmerker.

Endret av endrebjorsvik
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...