반응형
얼마전 운영팀에서 전달받은 이슈 리포트 내용중에 작성한 게시물에 링크가 이상하다는 문의가 있어 살펴보았습니다.
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:// 로 시작되는 패턴에 대해서 링크로 인식이 되어, 이슈를 해결했습니다.
반응형
'Android + Kotlin' 카테고리의 다른 글
[Android+Kotlin] 외부저장소에 파일 저장하기(Android Q 이상) (0) | 2023.02.09 |
---|---|
[Android+Kotlin] Logcat 로그 전체 보기 팁 (잘림현상 극복~) (0) | 2023.01.16 |
커스텀 debounce 를 만들자! (0) | 2023.01.12 |
RecyclerView Adapter 안에서 click().throttleFirst() 사용하는 방법 (0) | 2023.01.11 |
손쉽게 Int, Float 를 dp로 변환하는 extension 코드 (0) | 2022.12.29 |