webForumDet fria alternativet

reguljära uttryck och url:er

Webbutveckling

7 svar · 546 visningar · startad av adde

Medlem sedan jan. 2000120 inlägg
Frågan#1

jag vill testa om urlen är gilltig:

$website = $_POST[website];
if (preg_match("/^http\:\/\/([a-zA-Z]+\.)?[a-zA-Z0-9\-]\.[a-zA-Z]{,4}$/",$website)){
echo "fungerar";
}else {
echo "fungerar inte";
}

skriver jag in en adress, exempelvis: http://www.aftonbladet.se/

så fungerar det inte, blir alltid fel!
Vad gör jag för fel???

Medlem sedan dec. 20025 483 inlägg
#2

I

[a-zA-Z0-9\-]\.

anger du att du endast vill matcha ett av dessa tecken.

Du menar att

[a-zA-Z]{,4}

skall vara det sista som matchas; i exemplet avslutas adressen med '/'.

Medlem sedan maj 2005562 inlägg
#3
preg_match("|^https?://[\w\.\-]+\.[a-z]{2,6}/?$|i", $website);

/red mindre justering.. hade missat att tillåta - och att upp till 6 tecken kunde ingå i toppdomänen.. se inlägg nedan

Medlem sedan mars 20025 907 inlägg
#4

Flyttas från PHP!

Medlem sedan feb. 2000438 inlägg
#5

Utvecklar den lite så att det går att använda - i urlen. Det finns även ett par TLDer som är längre än fyra bokstäver.

preg_match("|^https?://(\w[-\w]*?\w\.)+[a-z]{2,6}/?$|i", $website);

Den fallerar ju även om någon anger en url som innehåller mer än enbart domänen, men det kanske är meningen.

Medlem sedan maj 2005562 inlägg
#6

Csson skrev:

Utvecklar den lite så att det går att använda - i urlen. Det finns även ett par TLDer som är längre än fyra bokstäver.

preg_match("|^https?://(\w[-\w]*?\w\.)+[a-z]{2,6}/?$|i", $website);

Den fallerar ju även om någon anger en url som innehåller mer än enbart domänen, men det kanske är meningen.

hur menar du med att den fallerar om man anger mer än bara domänen ??
missade - i min.. o visste inte att det fanns topdomäner med fler än 4 bokstäver...

tycker din variant verkar onödigt invecklad.. varför ens gruppera ihop dem ?

följande ...

 preg_match("|^https?://[\w\.\-]+\.[a-z]{2,6}/?$|i", $website);

fixar även - o med upp till 6 bokstäver i toppdomänen

Medlem sedan feb. 2000438 inlägg
#7

sl0k skrev:

hur menar du med att den fallerar om man anger mer än bara domänen ??

Att http://www.aftonbladet.se/sport/ inte matchas. Iofs bara att ta bort $, men antar att adde ville ha det så.

sl0k skrev:

tycker din variant verkar onödigt invecklad.. varför ens gruppera ihop dem ?

Beror på hur petig man vill vara.. - är iallafall inte giltig först och sist i domännamn vad jag vet. Om man inte är så petig spelar det ingen roll :).

Medlem sedan maj 2005562 inlägg
#8

sant .. hehe .. tänkte inte så långt :)

preg_match("|^https?://[\w\.\-]+\.[a-z]{2,6}(/[^\s]*)?$|i", $website);

matchar även tecken efter domänen.. där ganska många tecken är tilåtna ex ?&#= mfl..

266 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)