Проверка дали низът е линк

ventsi34

Registered
Здравейте, имам форма (инпут) , в което трябва да се въведе директен линк към картинка за да се визуализира на определено място но как да проверя дали се въвежда наистина линк или просто някакъв текст?
 
Най-лесно е:
PHP:
$url = '';
if (strstr("http://", $url) || strstr("https://", $url))
{
echo 'Линк е';
}
else
{
echo 'Не е линк';
}
Ако искаш нещо по-добро използвай preg_match
 
PHP:
<?php
function validLink($link) {
    if(preg_match("/http:\/\//", $link)) {
        return true;
    } else {
        return false;
    }
}
?>
http://scriptplayground.com/tutorials/php/Simple-Way-to-Validate-Links/
В коментарите има доста по-добри решения.
 
Ето по-добрият вариянт с preg_match:
PHP:
$url = 'http://www.google.bg';
if (preg_match('/^(http|https):\/\/([a-z0-9-]\.+)*/i', $url))
{
echo 'линк е';
}
else
{
echo 'Не е линк";
}
 
Ev0luti0N каза:
Ето по-добрият вариянт с preg_match:
PHP:
$url = 'http://www.google.bg';
if (preg_match('/^(http|https):\/\/([a-z0-9-]\.+)*/i', $url))
{
echo 'линк е';
}
else
{
echo 'Не е линк";
}

Ev0luti0N благодаря за кода, а сега как ще стане ако искам да може да се въвежда линк и с www отпред, че видях, че това не върви нещо и как да разбера дали на края линка завършва със примерно .png, .gif такъв формат? А ако можеш да обясниш разясниш как се пише ето тази част,

Код:
/^(http|https):\/\/([a-z0-9-]\.+)*/
че не мога нещо да я схвана? Погледнах и в php.net ама пак ми куца ще съм много благодарен ако ми как се прави такъв код.
 
А можеш да проверяваш дали наистина адресът, който въвеждат съществува:

PHP:
function check_url($url) {

	if ( strlen( $url ) > 0  && function_exists( 'get_headers' ) ) {
			
		$file_headers = @get_headers( $url );
		$exists       = $file_headers && $file_headers[0] != 'HTTP/1.1 404 Not Found';
	}
		
	return $exists ? true : false;
}

И после проверката си я правиш така:

PHP:
if(check_url('http://abobev.com') {
	echo 'Линкът съществува';
} else {
	echo 'Линкът НЕ съществува';
}

Така ако въведеш линк, който не съществува - ще изкара грешка, дори и да е минал проверката на preg_match.

Комбинация от двете е идеална. Горните неща, който са ти ги дали можеш да ги сложиш преди

PHP:
if ( strlen( $url ) > 0  && function_exists( 'get_headers' ) ) {

и проверката ти ще е идеална :)
 
Проверка за линк ли ти трябва, или проверка за това дали наистина линка води към истинска картинка?
 
Иска да провери човека дали полето е линк и ако е линк дали този линк е картинка .png,gif,jpg,jpeg и т.н.
Ще стане както ти казахме по-горе, но ще трябва да си извадиш последните 3 символа с explode и end след което да провериш дали те са png,gif,jpg,jpeg. :?:
 
Ето ти две полезнички функции, които използвам:

PHP:
	function file_type($kartinka){
		$path_chunks = explode("/", $kartinka);
		$thefile     = $path_chunks[count($path_chunks) - 1];
		$dotpos      = strrpos($thefile, ".");
		return strtolower(substr($thefile, $dotpos + 1));
	}
	
	function is_image($kartinka){
		return ((in_array(file_type($kartinka), array('jpeg', 'jpg','png','gif'))) ? true : false);
	}

Както може би се вижда, първата функция проверява какъв тип е файла, а втората проверява дали е картинка. Ползва се така:

PHP:
if (is_image($url_na_kartinkata) == true) {
echo "Окей това е истинска картинка";
}
else { echo "Не, не става!"; }
 
PHP:
<?php
header("Content-Type: text/html; charset=UTF-8");

$allowed_words = array("scheme" => array("http", "https"),
						"path" => array(".jpg", ".jpeg", ".png", ".bmp", ".gif"));

$url = "http://www.example.com/index.gif";

$parseUrl = parse_url($url);

if((isset($parseUrl['scheme']) & isset($parseUrl['path'])) && in_array($parseUrl['scheme'], $allowed_words['scheme'])){
	$cut_path_ext = stristr($parseUrl['path'], ".");
	
	if(preg_match("/(www)?/i", $parseUrl['host']))
	{
		if(in_array($cut_path_ext, $allowed_words['path'])){
			echo "Линк с картинка е!";
		}
	}
}

?>

Това е моето решение :)
 

Back
Горе