Things take time

[SWIFT] 특수문자, 한글, 숫자, 이모티콘 정규식! 본문

iOS (기능)

[SWIFT] 특수문자, 한글, 숫자, 이모티콘 정규식!

겸손할 겸 2019. 3. 4. 14:44

[개요]


회원가입을 할때, 사용자의 이름을 입력받는다.

그런데 여기서 특수문자를 넣는다거나, 이모티콘, 숫자들을 넣는 것을 방지하기 위함이다.



[소스코드]

    func hasCharacters() -> Bool{
        do{
            let regex = try NSRegularExpression(pattern: "^[a-zA-Z가-힣ㄱ-ㅎㅏ-ㅣ\\s]$", options: .caseInsensitive)
            if let _ = regex.firstMatch(in: self, options: NSRegularExpression.MatchingOptions.reportCompletion, range: NSMakeRange(0, self.count)){
                return true
            }
        }catch{
            print(error.localizedDescription)
            return false
        }
        return false
    }

당연히 extenstion String{}안에 넣어 두면 된다. 숫자는 포함시키려면 0-9를 저 중간 사이에 넣으면 된다(...A-Z0-9가-힣...)

^는 시작을 알리는것 $는 끝남을 알리는 것, []는 문자열들을 담고 있는 것



그리고 사용자가 이름을 입력하는 곳에서 (UITextField의 딜리게이트 포함)

    // 한 글자 입력시 호출
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        let utf8Char = string.cString(using: .utf8)
        let isBackSpace = strcmp(utf8Char, "\\b")
        if string.hasCharacters() || isBackSpace == -92{
            return true
        }
        return false
    }

이렇게 사용하면, 유저는 영문, 한글만 입력해야 실제 입력이 되고 특수문자나 이모티콘, 숫자를 입력하면 실제 텍스트 필드에는 입력되지 않는다.

그리고 utf8Char는 백 버튼을 감지해서 지울때도 들어가야 하기 때문에 넣었다. 이 부분이 빠지면 뒤로가기 눌러도 지워지지 않는다(!)