Tunko Development Diary

[iOS][swift] UITextFile 이모티콘 입력 막기 (정규식 사용) 본문

Development/iOS 개발

[iOS][swift] UITextFile 이모티콘 입력 막기 (정규식 사용)

Tunko 2021. 2. 13. 01:30
// 정규식
extension String{
    // 한글 숫자 영문 특수문자 포함 정규식 (이모티콘 제외)
    func hasCharacters() -> Bool {
        do {
            let regex = try NSRegularExpression(pattern: "^[0-9a-zA-Z가-힣ㄱ-ㅎㅏ-ㅣ`~!@#$%^&*()\\-_=+\\[{\\]}\\\\|;:'\",<.>/?\\s]$", options: .caseInsensitive)
            if let _ = regex.firstMatch(in: self, options: NSRegularExpression.MatchingOptions.reportCompletion, range: NSMakeRange(0, self.count)) {
                return true
            }
        }catch {
            return false
        }
        return false
    }
}

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 {

            guard let textFieldText = textField.text,
                let rangeOfTextToReplace = Range(range, in: textFieldText) else {
                    return false
            }

            var tcount : Int = 0
            if string.count == 0
            {
                tcount = textField.text!.count - 1
            }
            else
            {
                tcount = textField.text!.count + string.count
            }
            setCommentWriteButtonState(textlanght: tcount)

            let substringToReplace = textFieldText[rangeOfTextToReplace]
            let count = textFieldText.count - substringToReplace.count + string.count
            return count <= 300
        }
        return false
    }

코드의 목적은 이모티콘입력을 받지 않는것이지만 이모티콘을 제한할 방법을 찾지 못했습니다.

편법을 사용했습니다.

정규식을 통해 입력 받을 문구를 정하고, 정규식에 포함되지 않은 문자열을 전부다 제외한다.

사실상 이모티콘을 감지하는것이 아닌 정규식으로 입력 받을 문자열을 나열했을 뿐 입니다.

"^[0-9a-zA-Z가-힣ㄱ-ㅎㅏ-ㅣ`~!@#$%^&*()\\-_=+\\[{\\]}\\\\|;:'\",<.>/?\\s]$",
반응형
Comments