본문 바로가기
2023년 부터/iOS&Swift

[iOS] 공백만 입력되었는지 체크하는 로직

by JeongUPark 2024. 1. 12.
반응형

채팅 개발을 하다 보면 사용자가 입력 시 공백이나 줄 바꿈 등의 글자가 존재하지 않는 입력을 하는 경우가 있습니다.

이 경우 기타 톡들을 보면(카카오톡, 라인 등등) 전송을 하지 않는 것을 확인할 수 있습니다.

 

그러므로 공백만 입력되었는지를 체크하는 로직이 필요한데 그 방법은 아래와 같습니다.

1. "trimmingCharacters(in:)" 메서드 사용

String 타입은 trimmingCharacters이라는 메서드를 가지고 있습니다. 이 메서드는 문자열의 앞뒤에 있는 공백과, 줄 바꿈을 제거한 후, 결과 문자열이 비어 있는지 확인합니다. 이를 통하여 공백만 입력되었는지 체크할 수 있습니다.

func isOnlyWhitespace(text: String) -> Bool {
    return text.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty
}

공백과 줄 바꿈 등으로만 이루어졌다면 true를 아니라면 false를 반환합니다.

2. 정규 표현식 사용

정규 표현식을 사용하여서도 체크가 가능합니다.

func isOnlyWhitespace(text: String) -> Bool {
    return text.range(of: "^[\\s]*$", options: .regularExpression) != nil
}

위 코드에서 ^[\\s]*$ 이 정규 표현식은 문자열이 공백 문자로 구성되어 있거나 비어  있는 경우에 일치하게 되므로 true를 반환 아닐 경우 false를 반환합니다.

사용예시

그럼 위 방식을 사용하는 방법을 알아보겠습니다.

UItextView의 경우에는 delegate를 등록하고 텍스트 변경 시 호출되는 textViewDidChange에서 위 메서드를 사용하면 됩니다.

혹은 Rxswift를 사용할 경우에도 동일하게 사용할 수 있습니다.

//UITextViewDelegate 
func textViewDidChange(_ textView: UITextView) {
    if isOnlyWhitespace(text: textView.text) {
        // 텍스트가 공백만 있음
    } else {
        // 텍스트에 공백 외의 문자가 있음
    }
}
//RxSwift
textView.rx.text.orEmpty
    .subscribe(onNext: { text in
    if isOnlyWhitespace(text: textView.text) {
   		// 텍스트가 공백만 있음
    } else {
    	// 텍스트에 공백 외의 문자가 있음
    }
}).disposed(by: disposeBag)

 

반응형