webForumDet fria alternativet

kolla url

PHP

12 svar · 796 visningar · startad av Pedda

Medlem sedan juni 20006 031 inlägg
Frågan#1

Jag använder följande funktion för att kolla om en sträng är en url. Och den funkar bra men jag vill att den ska returnera true även om http:// inte finns i början.
Någon som vet hur jag ska modifiera min regex?

function checkurl($url) {
	if (preg_match('/^(https?):\/\/((?:[-a-z0-9]+\.)*)([-a-z0-9]+)\.(com|edu|gov|int|mil|net|org|biz|info|name|museum|coop|aero|[a-z]{2})(\/[-a-z0-9_:@&?=+,.!\/~*%$]*)?$/i', $url)){ 
		return true; 
	}else{
		return false; 
	}
}
Medlem sedan juni 20019 519 inlägg
#2
'/^((https?):\/\/)?((?:[-a-z0-9]+\.)*)([-a-z0-9]+)\.(com|edu|gov|int|mil|net|org|biz|info|name|museum|coop|a  ero|[a-z]{2})(\/[-a-z0-9_:@&?=+,.!\/~*%$]*)?$/i'
Medlem sedan juni 20006 031 inlägg
#3

den koden kommer väl även returnera true på

nånting.nåntingannat.se

Medlem sedan juni 20019 519 inlägg
#4

ja hur vill du annars göra? Du kan ju omöjligt kontrollera att länken är korrekt innan den retunera true ;) så länge folk skriver in ett godkänt utryck i din regExp kommer den retunera true. Den validera ju även nu http://nånting.nåntingannat.se vilket är detsamma som du nu önskar att man inte behöver ha http://

Vill du så kan du använda
^ och $ om du bara ska ha en "input" där man ska fylla i en URL...

Medlem sedan aug. 20039 340 inlägg
#5

Flyttat från Regular Expressions på grund av att provtiden för forumet har gått ut

Medlem sedan feb. 20034 441 inlägg
#6

Har sprungit på den här funktionen för att validera en URL:

/**
* Validate URL
* Allows for port, path and query string validations
* @param    string      $url	   string containing url user input
* @return   boolean     Returns TRUE/FALSE
*/
function validateURL($url){
	$pattern = '/^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/';
	return preg_match($pattern, $url);
}

Det här nu visat sig att den inte godkänner en url som t.ex. ser ut såhär:

http://www.minsajt.com/foo/app/cm/Browse.jsp?PAGE=1284

Tar man bort ?PAGE=1284 så fungerar det dock. Hur justerar jag funktionen ovan för att få det här att funka? Eller finns det bättre sätt att kontrollera URL'er?

Tack!

Medlem sedan juni 20019 519 inlägg
#7

regexpbuddy library:

\b(?:(?:https?|ftp|file)://|www\.|ftp\.)[-A-Z0-9+&@#/%=~_|$?!:,.]*[A-Z0-9+&@#/%=~_|$]
Medlem sedan feb. 20034 441 inlägg
#8

Jag får inte till det, får Delimiter must not be alphanumeric or backslash hur jag än gör. Kör med preg_match.

Medlem sedan feb. 20034 441 inlägg
#9

Googlade lite och hittade den här.

Inte lika snyggt kanske, men jag behöver ingen "värre" validering.

Medlem sedan feb. 20034 441 inlägg
#10

Nej.. den där går inte heller, den här länken går inte igenom då:

http://www.google.se?foo=abc&foo=test#part1
Medlem sedan feb. 20034 441 inlägg
#11

Hittade den här nu:
http://www.daniweb.com/forums/post1051130.html#post1051130

Den fungerar bra på mina exempel ovan, så kör på den. Om någon kan några bättre sätt så dela gärna med er!

Medlem sedan juni 20019 519 inlägg
#12

Testar jag gjort fungerar det även på #test

if (preg_match('/\b(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/i', $subject)) {
	# Successful match
} else {
	# Match attempt failed
}
Medlem sedan feb. 20034 441 inlägg
#13

Jo det där funkade också och var en snyggare lösning, tack!

257 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)