본문 바로가기

Web/ASP

정규화표현식을 사용한 tag를 삭제하는 것과 자동링크입니다

Php로 작성된 적수보드를 보고 따라 해보았습니다.
정규화 표현식 이것 정말 잘 사용하면 물건이겠더군요.
auto_link는 보통게시판에서 허용치 않는 경우 http://www.taeyo.pe.kr를 쓸경우 자동링크 기능을 해주는 것입
니다.
아직 정규화 표현식을 완전히 알지 못했지만 한번씩 도전해 보세요.
이것 달 이용하면 여러모로 도움될듯.. 아이디 체크등등
참 한글지원은 잘 안됩니다.
' --------------------------------------------------------
' Function Name        : regular_replace
' Description            : 정규표현식을 이용한 대치
' --------------------------------------------------------                
Function eregi_replace(pattern, replace, text)
    
Dim eregObj
    
' Create regular expression
Set eregObj= New RegExp
        
eregObj.Pattern= pattern             ' Set Pattern(패턴 설정)
eregObj.IgnoreCase    = True    ' Set Case Insensitivity(대소문자 구분 여부)
eregObj.Global = True        ' Set All Replace(전체 문서에서 검색)
        
eregi_replace = eregObj.Replace(text, replace)    ' Replace String
        
End Function    

Function delete_tag(atcText)
    
' Tag를 삭제한다.
atcText= eregi_replace("<html(.*|)<body([^>]*)>","",atcText)
atcText= eregi_replace("</body(.*)</html>(.*)","",atcText)
atcText= eregi_replace("<[/]*(div|layer|body|html|head|meta|form|input|select|textarea|base)[^>]
*>","",atcText)
atcText= eregi_replace("<(style|script|title|link)(.*)</(style|script|title)>","",atcText)
atcText= eregi_replace("<[/]*(script|style|title|xmp)>","",atcText)
atcText= eregi_replace("([a-z0-9]*script:)","deny_$1",atcText)
atcText= eregi_replace("<(\?|%)","<$1",atcText)
atcText= eregi_replace("(\?|%)>","$1>",atcText)

' Tag가 제거된 문자열을 리턴한다.
delete_tag    = atcText
End Function

' --------------------------------------------------------
' Function Name: auto_link
' Description: 문서 내용에 있는 Url를 찾아내어 자동으로 링크를 구성하는 함수
' --------------------------------------------------------        
Function auto_link(text)

Dim regex_file, regex_http, regex_mail
        
regex_file= "gz|tgz|tar|gzip|zip|rar|mpeg|mpg|exe|rpm|dep|rm|ram|asf|ace|viv|avi|mid|gif|jpg|png|bmp|ep
s|mov"
regex_http    = "(http|https|ftp|telnet|news):\/\/(([\xA1-\xFEa-z0-9_\-]+\.[][\xA1-\xFEa-z0-
9:;&#@=_~%\?\/\.\,\+\-]+)(\/|[\.]*[a-z0-9]))"
regex_mail    = "([\xA1-\xFEa-z0-9_\.\-]+)@([\xA1-\xFEa-z0-9_\-]+\.[a-z0-9\-\._\-]+[\.]*[\xA1-
\xFEa-z0-9\?=]*)"
        
' img tag 와 a tag 의 경우 링크가 여러줄에 걸쳐 이루어져 있을 경우
' 이를 한줄로 합침 (합치면서 부가 옵션들은 모두 삭제함)
text = eregi_replace("<(a|img)[^>]*(href|src)[^>]*(" & regex_http & "|mailto:" & regex_mail & ")[^>]*>","<$1
$2=""$3"">", text)
        
' 특수문자와 링크시 target 삭제
text    = eregi_replace("&(quot|gt|lt)","!$1", text)

' html 사용시 Link 보호
text     = eregi_replace("href=""(" & regex_http & ")""[^>]*>","href=""$2_orig://$3"" target=""_blank"">", text)
text     = eregi_replace("href=""mailto:(" & regex_mail & ")"">","href=""mailto:$2#-#$3"">", text)
text     = eregi_replace("(background|codebase|src)[ \n]*=[\n""' ]*(" & regex_http & ")[""']
*","$1=""$3_orig://$4""",text)

'링크가 안된 Url및 Email Address 자동 링크
text     = eregi_replace("(" & regex_http & ")" ,"<a href=""$1"" target=""_blank"">$1</a>", text)
text     = eregi_replace("(" & regex_mail & ")","<a href=""mailto:$1"">$1</a>", text)
' 보호를 위해 치환된것 복구
text = eregi_replace("!(quot|gt|lt)","&$1", text)
text = eregi_replace("(http|https|ftp|telnet|news|mms)_orig","$1", text)
text = eregi_replace("#-#","@",text)
' File Link시 Target을 삭제        
text = eregi_replace("(\.(" & regex_file & ")"") target=""_blank""","$1", text)

auto_link    = text
End Function

'Web > ASP' 카테고리의 다른 글

md5  (0) 2013.09.26
소스보기에서 소스 안보이게 하는 방법  (0) 2013.09.26
DateDiff  (0) 2013.09.26
쿼리 날리기  (0) 2013.09.26
Set db = Server.CreateObject(  (0) 2013.09.26