webForumDet fria alternativet

kolla url

12 svar · 796 visningar · startad av Pedda

PeddaMedlem sedan juni 20004 880 inlägg
#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; 
	}
}
voigtann1Medlem sedan juni 20018 810 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'
PeddaMedlem sedan juni 20004 880 inlägg
#3

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

nånting.nåntingannat.se

voigtann1Medlem sedan juni 20018 810 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...

nitro2k01Medlem sedan aug. 20037 630 inlägg
#5

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

MickeA.comMedlem sedan feb. 20034 528 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!

voigtann1Medlem sedan juni 20018 810 inlägg
#7

regexpbuddy library:

\b(?:(?:https?|ftp|file)://|www\.|ftp\.)[-A-Z0-9+&@#/%=~_|$?!:,.]*[A-Z0-9+&@#/%=~_|$]
MickeA.comMedlem sedan feb. 20034 528 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.

MickeA.comMedlem sedan feb. 20034 528 inlägg
#9

Googlade lite och hittade den här.

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

MickeA.comMedlem sedan feb. 20034 528 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
MickeA.comMedlem sedan feb. 20034 528 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!

voigtann1Medlem sedan juni 20018 810 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
}
MickeA.comMedlem sedan feb. 20034 528 inlägg
#13

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

Genererad på 369 ms · cache AV · v20260730165559-full.f96bc7eb