PeddaMedlem sedan juni 20004 880 inlägg
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
'/^((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
den koden kommer väl även returnera true på
nånting.nåntingannat.se
voigtann1Medlem sedan juni 20018 810 inlägg
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
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
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
regexpbuddy library:
\b(?:(?:https?|ftp|file)://|www\.|ftp\.)[-A-Z0-9+&@#/%=~_|$?!:,.]*[A-Z0-9+&@#/%=~_|$]
MickeA.comMedlem sedan feb. 20034 528 inlägg
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
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
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
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
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
Jo det där funkade också och var en snyggare lösning, tack!