PHP의 FILTER_SANITIZE_NUMBER_FLOAT 상수는 부동 소수점(float) 숫자에서 허용되지 않는 모든 문자를 제거하는 데 사용됩니다. 이 필터를 적용하면 숫자, 부호(+/-), 그리고 선택적으로 지정한 구분 기호를 제외한 나머지 문자는 모두 삭제됩니다.
사용 가능한 플래그(Flags)
FILTER_SANITIZE_NUMBER_FLOAT 필터는 다음 세 가지 플래그와 함께 사용할 수 있으며, 각 플래그는 특정 문자의 허용 여부를 결정합니다.
- FILTER_FLAG_ALLOW_FRACTION — 소수점(.) 같은 소수 구분 기호를 허용합니다.
- FILTER_FLAG_ALLOW_THOUSAND — 콤마(,) 같은 천 단위 구분 기호를 허용합니다.
- FILTER_FLAG_ALLOW_SCIENTIFIC — e, E와 같은 과학적 표기법(지수 표기)을 허용합니다.
반환 값
FILTER_SANITIZE_NUMBER_FLOAT 상수 자체는 아무것도 반환하지 않습니다. 실제 정제(sanitize) 작업은 filter_var() 함수에 이 상수를 전달했을 때 수행되며, 함수는 불법 문자가 제거된 문자열을 반환합니다.
예제 1: FILTER_FLAG_ALLOW_FRACTION 플래그
다음은 FILTER_FLAG_ALLOW_FRACTION 플래그를 사용하여 소수점을 허용하는 예제입니다.
<?php
$var = "3-1f+2.56p";
var_dump(filter_var($var, FILTER_SANITIZE_NUMBER_FLOAT,
FILTER_FLAG_ALLOW_FRACTION));
?>출력 결과
string(8) "3-1+2.56"
위 결과에서 알 수 있듯이, 알파벳 'f'와 'p'는 불법 문자로 간주되어 제거되었지만, 소수점 '.'은 FRACTION 플래그 덕분에 그대로 유지되었습니다.
예제 2: FILTER_FLAG_ALLOW_THOUSAND 플래그
이번에는 FILTER_FLAG_ALLOW_THOUSAND 플래그를 사용하여 천 단위 구분 기호인 콤마(,)를 허용하는 예제를 살펴보겠습니다.
<?php
$var = "1-4f+25,6p";
var_dump(filter_var($var, FILTER_SANITIZE_NUMBER_FLOAT,
FILTER_FLAG_ALLOW_THOUSAND));
?>출력 결과
string(8) "1-4+25,6"
이 예제에서도 마찬가지로 알파벳 문자는 제거되고, 콤마(,)는 THOUSAND 플래그에 의해 유효한 문자로 인정되어 결과에 포함된 것을 확인할 수 있습니다.
정리
FILTER_SANITIZE_NUMBER_FLOAT는 사용자 입력값에서 숫자 관련 데이터만 안전하게 추출하고 싶을 때 유용한 필터입니다. 다만 어떤 구분 기호까지 허용할지는 플래그 조합으로 신중하게 결정해야 하며, 필요에 따라 여러 플래그를 비트 연산자(|)로 조합하여 동시에 사용할 수도 있습니다.