JSTL(JavaServer Pages Standard Tag Library)에서 제공하는 fn:contains() 함수는 입력 문자열 안에 지정된 하위 문자열이 포함되어 있는지 여부를 판별합니다. 이 함수는 조건이 충족되면 true, 그렇지 않으면 false를 반환하며, 주로 <c:if> 태그와 함께 사용해 조건 분기 로직을 간결하게 작성할 수 있습니다.
구문
fn:contains() 함수의 기본 구문은 다음과 같습니다.
boolean contains(java.lang.String, java.lang.String)
첫 번째 인자는 검색 대상이 되는 원본 문자열이고, 두 번째 인자는 찾고자 하는 하위 문자열입니다.
예제
다음 예제를 통해 fn:contains() 함수의 실제 동작 방식을 살펴보겠습니다.
<%@ taglib uri = "https://java.sun.com/jsp/jstl/core" prefix = "c" %>
<%@ taglib uri = "https://java.sun.com/jsp/jstl/functions" prefix = "fn" %>
<html>
<head>
<title>JSTL 함수 사용하기</title>
</head>
<body>
<c:set var = "theString" value = "I am a test String"/>
<c:if test = "${fn:contains(theString, 'test')}">
<p>'test' 문자열을 찾았습니다<p>
</c:if>
<c:if test = "${fn:contains(theString, 'TEST')}">
<p>'TEST' 문자열을 찾았습니다<p>
</c:if>
</body>
</html>
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
'test' 문자열을 찾았습니다
주요 포인트: 대소문자 구분
fn:contains() 함수는 대소문자를 엄격하게 구분한다는 점에 유의해야 합니다. 위 예제에서 변수 theString에는 "I am a test String"이라는 값이 저장되어 있습니다. 소문자 'test'는 실제로 문자열에 존재하므로 첫 번째 조건식이 참이 되어 메시지가 출력됩니다. 반면 대문자 'TEST'는 문자열에 존재하지 않기 때문에 두 번째 <c:if> 블록은 실행되지 않습니다.
만약 대소문자 구분 없이 문자열을 비교하고 싶다면, fn:toLowerCase() 또는 fn:toUpperCase() 함수를 사용해 두 문자열을 동일한 형태로 변환한 후 비교하는 방법을 활용할 수 있습니다. 예를 들어 ${fn:contains(fn:toLowerCase(theString), 'test')}처럼 작성하면 어떤 대소문자 조합이든 일관된 결과를 얻을 수 있습니다.