티스토리 뷰

정규식을 배우면서 어느정도 기본을 익히고 제일 먼저 연습하는 것이 이메일 주소 체크하는 것과 함께 URL 주소 체크하는 것입니다. 그러나 사실 URL 은 아래처럼 각 부분별로 구분되어, 이러한 내용이 있고 없고가 차이 때문에 추출하기가 힘든 것중 하나입니다.

URL Syntax:
protocol :// user : password @ host : port / path / filename ? query #ref

  • Protocol : 일반적으로 웹페이지를 나타낸다면 http 이고, 이외에 텔넷이나 FTP, 메일, 등등 여러가지가 있습니다. 이 프로토콜에 따라 뒤에 따라오는 주소의 형식도 달라집니다.
  • User, Password : 웹인증을 위한 정보입니다. 웹인증을 사용한 사이트에서만 가능하고 일반적인 사이트(예: 네이버, 다음)등에서 적어봤자 불가능합니다.
  • Host, Port : 도메인 또는 IP 를 나타내며, 이 호스트에 접속하기 위한 포트를 별도로 지정하게 됩니다. 지정하지 않을 경우 표준으로 지정된 포트번호를 이용하여 접속하게 됩니다. http 의 경우 80, ftp 는 21 등 이미 RFC 에 의해 정해진 기본 포트를 사용합니다.
  • Path, Filename : 디렉토리와 파일명입니다. 최근에는 rewrite 를 사용하여 URL 주소를 짧게 쓰는 것을 선호하기 때문에 얼핏봐서는 파일명을 구분하기는 어렵습니다.
  • Query, Ref : GET 방식으로 넘기는 값을 Query String 이라 하는데, '키=값' 형태로 작성되며 각 항목은 '&' 로 구분합니다. Ref 는 <a name=""> 을 이용하여 사용된 문서의 특정 부분으로 이동하도록 하는 문법으로 '#' 로 시작합니다.

각 부분에는 허용되는 특수문자들이 다르기 때문에 이런것들을 검사해줘야 합니다. -_-;
자세한 정보는 RFC1738 을 참고하세요. 

function collectURL(text) {
    var rUrlRegex = /(?:(?:(https?|ftp|telnet):\/\/|[\s\t\r\n\[\]\`\<\>\"\'])((?:[\w$\-_\.+!*\'\(\),]|%[0-9a-f][0-9a-f])*\:(?:[\w$\-_\.+!*\'\(\),;\?&=]|%[0-9a-f][0-9a-f])+\@)?(?:((?:(?:[a-z0-9\-가-힣]+\.)+[a-z0-9\-]{2,})|(?:[\d]{1,3}\.){3}[\d]{1,3})|localhost)(?:\:([0-9]+))?((?:\/(?:[\w$\-_\.+!*\'\(\),;:@&=ㄱ-ㅎㅏ-ㅣ가-힣]|%[0-9a-f][0-9a-f])+)*)(?:\/([^\s\/\?\.:<>|#]*(?:\.[^\s\/\?:<>|#]+)*))?(\/?[\?;](?:[a-z0-9\-]+(?:=[^\s:&<>]*)?\&)*[a-z0-9\-]+(?:=[^\s:&<>]*)?)?(#[\w\-]+)?)/gmi;
    return rUrlRegex.match(text);
}



참고 사이트

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함