PHP의 filter_input() 함수는 자체적으로 AND/OR 논리 연산자를 직접 지원하지는 않지만, 필터 플래그와 배열 처리 기법을 활용하면 사실상 동일한 결과를 얻을 수 있습니다. 핵심은 입력값이 배열인지 스칼라(단일 값)인지에 따라 적절한 필터 옵션을 분기 처리하는 것입니다.
배열 입력 처리하기
POST로 전달된 값이 배열 형태일 경우 FILTER_REQUIRE_ARRAY 플래그를 사용하면 됩니다. 삼항 연산자를 이용해 동적으로 플래그를 지정하는 방식이 가장 간결합니다.
$value = filter_input(
INPUT_POST,
'field',
FILTER_DEFAULT,
is_array($_POST['field']) ? FILTER_REQUIRE_ARRAY : NULL
);모든 POST 값에 일괄 필터 적용하기
여러 개의 POST 필드를 한 번에 처리하려면 반복문을 활용하는 것이 효율적입니다. 아래 예제는 전송된 모든 값을 순회하면서, 배열인지 여부에 따라 서로 다른 필터를 적용하는 방식입니다.
$memory = array();
// POST로 전달된 모든 값 순회
foreach ($_POST as $key => $value) {
if (is_array($value)) {
// 배열 형태의 입력값에 배열용 필터 적용
$memory[$key] = filter_input(INPUT_POST, $key, {filters for array});
} else {
// 단일 값(스칼라)에 스칼라용 필터 적용
$memory[$key] = filter_input(INPUT_POST, $key, {filters for scalar});
}
}추가 팁: 여러 필터 조건 결합하기
하나의 입력값에 여러 검증 규칙을 AND 조건처럼 적용하고 싶다면, 비트 연산자(|)를 사용해 필터 상수를 결합할 수 있습니다.
$email = filter_input(
INPUT_POST,
'email',
FILTER_VALIDATE_EMAIL | FILTER_FLAG_EMAIL_UNICODE
);또는 OR 조건이 필요한 경우, 각각의 필터 결과를 변수에 담은 뒤 PHP의 논리 연산자(&&, ||)로 조합하면 원하는 로직을 구현할 수 있습니다.
$a = filter_input(INPUT_POST, 'field_a', FILTER_VALIDATE_INT);
$b = filter_input(INPUT_POST, 'field_b', FILTER_VALIDATE_FLOAT);
if ($a !== false && $b !== false) {
// 두 필터가 모두 통과한 경우 (AND 조건)
}이처럼 filter_input()은 단독으로 복잡한 논리식을 표현하지는 못하지만, 플래그 조합과 반복문, 그리고 외부 논리 연산을 함께 활용하면 유연하고 안전한 입력 검증 체계를 구축할 수 있습니다.