본문 바로가기

Android + Kotlin

Linkify 에서 WEB_URL 패턴을 커스텀해보자.

반응형

얼마전 운영팀에서 전달받은 이슈 리포트 내용중에 작성한 게시물에 링크가 이상하다는 문의가 있어 살펴보았습니다.

TextView 에 Linkify 를 이용하여 URL 패턴을 자동으로 링크가 생성되도록 한 코드였습니다.

 

if(PatternsCompat.WEB_URL.matcher(text).find()) {
    LinkifyCompat.addLinks(this, PatternsCompat.WEB_URL, "")
}

 

 URL 패턴을 위와 같이 PatternsCompat.WEB_URL 을 사용하였습니다.

그랬더니.. 

 

1.aaaa

2.bbbb

 

와 같은 패턴에도 링크가 생성되었습니다.

아마도, naver.com 이런 패턴에도 PatternsCompat.WEB_URL은 링크로 인식이 되는 듯 싶었습니다.

그래서, 패턴을 수정하기로 했습니다.

 

class PatternUtils {

    companion object {

        ....

        val WEB_URL: Pattern = Pattern.compile(
            "(?:^|[\\W])((ht|f)tp(s?):\\/\\/|www\\.)"
                    + "(([\\w\\-]+\\.){1,}?([\\w\\-.~]+\\/?)*"
                    + "[\\p{Alnum}.,%_=?&#\\-+()\\[\\]\\*$~@!:/{};']*)",
            Pattern.CASE_INSENSITIVE or Pattern.MULTILINE or Pattern.DOTALL
        )
    }
}

 

패턴만 모아놓은 클래스에 WEB_URL 패턴을 추가해줍니다.

 

if(PatternUtils.WEB_URL.matcher(text).find()) {
    LinkifyCompat.addLinks(this, PatternsCompat.WEB_URL, "")
}

 

새로운 패턴으로 링크가 들어가도록 하였습니다.

 

위와같이 처리하여 기존에 1.aaaa 와 같은 패턴은 링크로 인식이 안되고, www. 이나, http://, https:// 로 시작되는 패턴에 대해서 링크로 인식이 되어, 이슈를 해결했습니다.

 

반응형