PHP의 IntlChar::charType() 함수는 입력된 문자가 속한 유니코드 일반 범주(General Category) 값을 정수 형태로 반환합니다. 이 함수를 활용하면 전달된 문자가 대문자인지, 소문자인지, 숫자인지, 문장 부호인지, 제어 문자인지 등을 코드로 간편하게 판별할 수 있습니다. 이 함수를 사용하려면 PHP에 intl 확장 모듈이 설치되어 있어야 합니다.
문법(Syntax)
int IntlChar::charType (val)
매개변수(Parameters)
val − 검사하려는 문자입니다. 정수(유니코드 코드 포인트) 또는 UTF-8로 인코딩된 문자열을 전달할 수 있습니다.
반환값(Return)
IntlChar::charType() 함수는 아래 나열된 일반 범주 상수 중 하나를 반환합니다.
IntlChar::CHAR_CATEGORY_UNASSIGNED − 아직 할당되지 않은 코드 포인트
IntlChar::CHAR_CATEGORY_GENERAL_OTHER_TYPES − 기타 일반 유형(Cn)
IntlChar::CHAR_CATEGORY_UPPERCASE_LETTER − 대문자(Lu)
IntlChar::CHAR_CATEGORY_LOWERCASE_LETTER − 소문자(Ll)
IntlChar::CHAR_CATEGORY_TITLECASE_LETTER − 제목 케이스 문자(Lt)
IntlChar::CHAR_CATEGORY_MODIFIER_LETTER − 수식 문자(Lm)
IntlChar::CHAR_CATEGORY_OTHER_LETTER − 기타 문자(Lo)
IntlChar::CHAR_CATEGORY_NON_SPACING_MARK − 비간격 결합 기호(Mn)
IntlChar::CHAR_CATEGORY_ENCLOSING_MARK − 감싸는 결합 기호(Me)
IntlChar::CHAR_CATEGORY_COMBINING_SPACING_MARK − 간격을 차지하는 결합 기호(Mc)
IntlChar::CHAR_CATEGORY_DECIMAL_DIGIT_NUMBER − 십진 숫자(Nd)
IntlChar::CHAR_CATEGORY_LETTER_NUMBER − 문자형 숫자(Nl)
IntlChar::CHAR_CATEGORY_OTHER_NUMBER − 기타 숫자(No)
IntlChar::CHAR_CATEGORY_SPACE_SEPARATOR − 공백 분리 문자(Zs)
IntlChar::CHAR_CATEGORY_LINE_SEPARATOR − 줄 분리 문자(Zl)
IntlChar::CHAR_CATEGORY_PARAGRAPH_SEPARATOR − 단락 분리 문자(Zp)
IntlChar::CHAR_CATEGORY_CONTROL_CHAR − 제어 문자(Cc)
IntlChar::CHAR_CATEGORY_FORMAT_CHAR − 서식 문자(Cf)
IntlChar::CHAR_CATEGORY_PRIVATE_USE_CHAR − 전용 사용 영역 문자(Co)
IntlChar::CHAR_CATEGORY_SURROGATE − 서러게이트(Cs)
IntlChar::CHAR_CATEGORY_DASH_PUNCTUATION − 대시(줄표) 문장 부호(Pd)
IntlChar::CHAR_CATEGORY_START_PUNCTUATION − 시작 문장 부호(여는 괄호 등, Ps)
IntlChar::CHAR_CATEGORY_END_PUNCTUATION − 종료 문장 부호(닫는 괄호 등, Pe)
IntlChar::CHAR_CATEGORY_CONNECTOR_PUNCTUATION − 연결 문장 부호(Pc)
IntlChar::CHAR_CATEGORY_OTHER_PUNCTUATION − 기타 문장 부호(Po)
IntlChar::CHAR_CATEGORY_MATH_SYMBOL − 수학 기호(Sm)
IntlChar::CHAR_CATEGORY_CURRENCY_SYMBOL − 통화 기호(Sc)
IntlChar::CHAR_CATEGORY_MODIFIER_SYMBOL − 수식 기호(Sk)
IntlChar::CHAR_CATEGORY_OTHER_SYMBOL − 기타 기호(So)
IntlChar::CHAR_CATEGORY_INITIAL_PUNCTUATION − 앞따옴표 문장 부호(Pi)
IntlChar::CHAR_CATEGORY_FINAL_PUNCTUATION − 뒷따옴표 문장 부호(Pf)
IntlChar::CHAR_CATEGORY_CHAR_CATEGORY_COUNT − 정의된 범주 상수의 총개수
예제
다음은 IntlChar::charType() 함수의 실제 사용 예제입니다.
<?php
var_dump(IntlChar::charType("n") === IntlChar::CHAR_CATEGORY_CONTROL_CHAR);
echo "<br>";
var_dump(IntlChar::charType("jkl") === IntlChar::CHAR_CATEGORY_OTHER_PUNCTUATION);
echo "<br>";
var_dump(IntlChar::charType("r") === IntlChar::CHAR_CATEGORY_CONTROL_CHAR);
echo "<br>";
var_dump(IntlChar::charType("Z") === IntlChar::CHAR_CATEGORY_UPPERCASE_LETTER);
echo "<br>";
var_dump(IntlChar::charType(".") === IntlChar::CHAR_CATEGORY_OTHER_PUNCTUATION);
echo "<br>";
?>
실행 결과
위 예제를 실행하면 다음과 같은 결과가 출력됩니다.
bool(false)
bool(false)
bool(false)
bool(true)
bool(true)
결과 해설
"n" − 일반적인 소문자이므로 제어 문자(CONTROL_CHAR)가 아니어서 false가 반환됩니다.
"jkl" − 여러 문자를 전달하면 첫 번째 문자만 검사하며, 'j'는 소문자이므로 기타 문장 부호(OTHER_PUNCTUATION)가 아니어서 false입니다.
"r" − 역시 일반 소문자이므로 제어 문자가 아니어서 false입니다. 참고로 캐리지 리턴 문자 "\r"을 검사하면 true가 반환됩니다.
"Z" − 대문자이므로 UPPERCASE_LETTER와의 비교 결과가 true입니다.
"." − 마침표는 기타 문장 부호(OTHER_PUNCTUATION)에 해당하므로 true입니다.
이처럼 IntlChar::charType() 함수를 사용하면 문자열 유효성 검사나 텍스트 처리 로직에서 문자의 성격을 정확하게 구분할 수 있습니다.