2012-09-23 4 views
3

이 스크립트는 제출 된 값이 URL인지 확인하지만 그렇게하지는 않습니다. 나는 정규 표현식에 너무 익숙하지 않고 나를 위해 만든이 친구는 여행을 떠난다.값이 URL인지 어떻게 확인합니까?

 <script type="text/javascript">// <![CDATA[ 
     window.onload=init; 

     function init(){ 
     document.forms[0].onsubmit= function(){ 
     var url= document.getElementById("url").value; 
     var desc= document.getElementById("description").value; 
     var regex=new RegExp("^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$"); 
     var match=regex.test(url); 
     if(!match) 
     { 
      alert("The URL you entered is not valid"); 
      return false; 
     } 
     if(desc.length<10) 
     { 
      alert("There must be at least 10 characters in the description"); 
      return false; 
     } 
    }; 
} 
    // ]]></script> 

답변

0
if(/^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\d*)?)(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*|(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?\/$/i.test(url)) { 
    alert("URL is valid"); 
} 
else { 
    alert("URL is not valid"); 
} 

출처 : here

0

나는 당신이 정규 표현식을 배우기 시작하는 것이 좋습니다. 그들은 배우기 재미 있습니다. 나는 그들도 현재 배우고있다. O'reilly 's Mastering 정규식 Jeffrey E.F. Friedl은 아주 좋은 책으로, 일부 사이트에서 무료로 다운로드 할 수 있습니다. 확인 해봐.

6

PHP 5에는이 기능이 내장되어 있습니다. filter_var()을 사용하면됩니다.

function is_url($url) 
{ 
    return filter_var($url, FILTER_VALIDATE_URL) !== false; 
} 

편집 : 클라이언트 유효성 검사는 사용자의 편의를위한 것입니다. 실제로 데이터의 유효성을 검사하는 것은 아니며 Firefox TamperData를 사용하여 내가 원하는대로 제출할 수 있습니다. 위와 같이 서버 유효성 검사를 수행해야합니다.

+0

와우 꽤 간단하지만 멋지 네요! JavaScript를 사용하는 것보다 간단한 ... –

+0

어떤 이유에서든 작동하지 않는다면, 개점 게시물의 스크립트에 정확히 어디에 넣을 지 알려주실 수 있습니까? –

+1

이것은 자바 스크립트가 아닙니다. 이것은 PHP입니다. 앞에서 말한 것처럼 :'클라이언트 유효성 검사는 단지 사용자 편의입니다. 실제로 데이터의 유효성을 검사하는 것은 아니며 Firefox TamperData를 사용하여 내가 원하는대로 제출할 수 있습니다. 대신 위와 같이 서버 유효성 검사를 수행해야합니다. '클라이언트의 편의를 위해 많은 어려움을 겪고 있지만 서버는 여전히 취약합니다. – Artless

관련 문제