str_ends_with()
함수 사용법
str_ends_with()
함수는
문자열이 특정 문자열로 끝나는지 체크합니다.
특정 문자열로 끝나면 true
를 반환하고, 그렇지 않으면 false
를 반환합니다.
이 함수는 대소문자를 구분합니다.
PHP 8에서 도입된 함수로 PHP 8 이전의 버전에서는 호환되지 않습니다.
$haystack_en = 'Hello, world!';
var_dump(str_ends_with($haystack_en, 'world!')); // bool(true)
var_dump(str_ends_with($haystack_en, 'World!')); // bool(false) => 대소문자를 구분
var_dump(str_ends_with($haystack_en, 'world')); // bool(false)
$haystack_ko = '환영합니다!';
var_dump(str_ends_with($haystack_ko, '!')); // bool(true)
var_dump(str_ends_with($haystack_ko, '환영합니다!')); // bool(true)
var_dump(str_ends_with($haystack_ko, 'xxx환영합니다!')); // bool(false)
문자열이 특정 문자열로 시작하는지 체크하려면 str_starts_with()
함수를 사용하세요.
str_ends_with()
함수의 형식은 다음과 같습니다.
구문
str_ends_with(string $haystack, string $needle): bool
매개변수
$haystack |
검색 대상이 되는 문자열입니다. |
---|---|
$needle |
검색할 문자열입니다.
대소문자를 구분합니다. |
반환 값
빈 문자열(''
)은 모든 문자열의 끝 부분에 있다고 간주되므로, 빈 문자열을 $haystack
으로 사용하면 항상 true
를 반환합니다.
$haystack_1 = 'Hello, world!';
var_dump(str_ends_with($haystack_1, '')); // bool(true)
$haystack_2 = '';
var_dump(str_ends_with($haystack_2, '')); // bool(true)
이러한 동작은 문자열의 논리적 정의에 근거합니다. 빈 문자열은 어떤 문자열의 시작 부분이나 끝 부분에 존재하므로, 빈 문자열로 시작하거나 끝나는 모든 문자열에 대해 true
를 반환하는 것이 자연스러운 결과입니다. 따라서, 이 개념은 PHP뿐만 아니라 여러 프로그래밍 언어에서 보편적으로 적용됩니다.
Polyfill
PHP 8에서 도입된 함수로 PHP 8 이전의 버전에서는 호환되지 않습니다.
PHP 8 이전의 버전에서는 호환되지(지원하지) 않기 때문에 PHP 8 이전의 버전에서는 다음과 같이 사용할 수도 있습니다.
일러두기
아래의 예제 코드는 PHP 8 이전 버전에서 str_ends_with()
함수를 대체하기 위한 간단한 polyfill 예제입니다. 완벽하지 않습니다.
이 polyfill은 간단한 사용 사례에 맞추어 작성되었지만, 특정 사용자의 요구 사항(PHP 버전, 성능 고려, 대소문자 구분, 빈 문자열 처리, 다국어 문자열 처리, 기타 상황 등)에 따라 유연성을 추가할 필요가 있을 수 있습니다.
if ( ! function_exists( 'str_ends_with' ) ) {
/**
* PHP 8.0에서 추가된 `str_ends_with()` 함수의 폴리필.
*
* 대소문자를 구분하여 주어진 문자열(haystack)이
* 특정 부분 문자열(needle)로 끝나는지 확인합니다.
*
* @param string $haystack 검색할 문자열.
* @param string $needle `$haystack`에서 검색할 부분 문자열.
* @return bool `$haystack`가 `$needle`로 시작하면 true를, 그렇지 않으면 false를 반환.
*/
function str_ends_with( $haystack, $needle ) {
if ( '' === $haystack ) {
return '' === $needle;
}
$len = strlen( $needle );
return mb_substr( $haystack, -$len, $len ) === $needle;
}
}
코드 부연설명
strlen()
함수는 주어진 문자열의 길이를 숫자로 반환합니다.
코드 부연설명
mb_substr()
함수는 문자열에서 주어진 특정 위치부터 특정 길이만큼의 문자열을 잘라서 추출합니다. multi-byte 문자열에서 안전하게 작동합니다.
유용한 활용 예제
str_ends_with()
함수의 쓰임새를 잘 나타내는 활용 예제입니다.
예를 들어, 이미지 파일 경로에서 지원되는 확장자만 확인하는 방식이 자주 사용됩니다. 이 방법은 파일 업로드 시 검증에도 많이 쓰입니다.
/* 파일 확장자를 확인하는 함수 */
function check_image_file($file_path) {
// 지원되는 이미지 파일 확장자 배열 목록(소문자로 작성)
$allowed_extensions = ['.jpg', '.jpeg', '.png', '.gif'];
// 파일 경로를 소문자로 변환하여 비교
// str_ends_with() 함수는 대소문자를 구분하기 때문에
// 확장자가 소문자여도 대문자 확장자를 처리하지 못할 수 있기 때문임
$lower_case_file_path = strtolower($file_path);
// 파일 확장자가 목록 중 하나로 끝나는지 확인하는 부분
$is_image = false;
foreach ($allowed_extensions as $extension) {
if (str_ends_with($lower_case_file_path, $extension)) {
$is_image = true;
break;
}
}
// 검사 결과에 따라 메시지를 출력
if ($is_image) {
echo '지원되는 이미지 파일입니다.';
} else {
echo '지원되지 않는 파일 형식입니다.';
}
}
// 함수 호출 예시
check_image_file('picture.jpg'); // 지원되는 이미지 파일입니다.
check_image_file('document.pdf'); // 지원되지 않는 파일 형식입니다.
코드 부연설명
strtolower()
함수는 문자열을 소문자로 변환해서 반환합니다.
코드 부연설명
foreach()
반복문은 배열이나 객체를 순회해서 반복으로 처리할 때 사용하는 대표적인 구문입니다.
코드 부연설명
break
키워드는 실행 중인 현재 문을 즉시 종료하고, 다음 코드로 제어를 이동시키는 명령어입니다.
PHP 버전
- PHP 8 버전부터 지원합니다.