2010-11-26 3 views
2

게시 된 URL의 유효성을 검사하는 좋은 방법입니까?url - php를 구문 분석하고 스키마가 있는지 확인하고 URL 정규식을 확인하십시오

function validateURL($url) 
{ 
$pattern = '/^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)[email protected])?([\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); 
} 

$result = validateURL($_POST['url']); 
if ($result == "1"){ 
$scheme = parse_url($_POST['url'], PHP_URL_SCHEME); 
if (isset($scheme)){ 
    echo $scheme . "://" . parse_url($_POST['url'], PHP_URL_HOST); 
}else{ 
    echo "error you did not enter http://"; 
} 
}else{ 
echo "your url is not a valid format"; 
} 

답변

1

단순히 FILTER_VALIDATE_URL에 빌드 - 더 가고 싶어하고 일반 오류 메시지를 사용

if (filter_var($_POST['url'], FILTER_VALIDATE_URL)){ 
    echo "valid url"; 
}else{ 
    echo "invalid url"; 
} 

내가 그것으로 여러 오류 메시지를 표시 할 수로, 시작 쓴 것입니다 like :

잘못된 URL입니다. http://도 입력해야합니다.

당신이 좋은 경우 첫 번째 7/8 문자 http:// 또는 https://을 경우 당신은 확인할 수 있습니다 그렇지 않은 경우를 앞에 추가.

이러한 RegEx를 사용하고 유지하는 것은 문제가 이미 해결 된 경우 들어갈 수 없습니다. 또한 URL 형식을 설명하지 않는 한 일반적으로 오류 메시지에 더 자세히 설명 할 필요가 없습니다.

0

나는

filter_var($var, FILTER_VALIDATE_URL) 

단순한 생각에 원하는 경우 사용자가 당신에게 URL (존재하지 않는) 잘못을 줄 수 있기 때문에 strpos에 의해 프로토콜()을 확인하는 것만으로는 충분하다.

물론 도메인이 존재하는지 확인하고 유효한 http 상태를 반환 할 수 있지만 과장은 거의 없다고 생각합니다.

관련 문제