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는 백 버튼을 감지해서 지울때도 들어가야 하기 때문에 넣었다. 이 부분이 빠지면 뒤로가기 눌러도 지워지지 않는다(!)