Last active
July 16, 2020 05:37
-
-
Save hsleedevelop/a23fad58cfaecac850344508dbb7b479 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class UserInfoValidator { | |
enum Validation { | |
case nickname | |
var pattern: String { | |
switch self { | |
case .nickname: | |
return "^[a-zA-Z0-9ㄱ-ㅣ가-힣\\-\\.\\_]{1,16}$" | |
default: | |
return "" | |
} | |
} | |
} | |
static func isValid(nickname: String) -> Bool { | |
isValid(target: nickname, validation: Validation.nickname) | |
} | |
static func isValid(target: String, validation: Validation) -> Bool { | |
guard let regex = try? NSRegularExpression(pattern: validation.pattern, options: []) else { return false } | |
let result = regex.firstMatch(in: target, options: [], range: .init(location: 0, length: target.utf16.count)) | |
return result != nil | |
} | |
} | |
private func validateNickname() throws { | |
guard let nickname = nicknameField.text, nickname.isNotEmpty else { | |
nicknameField.textField.invalidText = "닉네임을 입력해주세요." | |
nicknameField.textField.isInvalid = true | |
throw NSError(domain: "Validation error", code: -1, userInfo: nil) | |
} | |
if !UserInfoValidator.isValid(nickname: nickname) { | |
self.nicknameField.textField.invalidText = "[_], [-], [.] 외 특수문자 및 공백은 사용하실 수 없습니다." | |
nicknameField.textField.isInvalid = true | |
throw NSError(domain: "Validation error", code: -1, userInfo: nil) | |
} | |
nicknameField.textField.isInvalid = false | |
} | |
nicknameField.textField.rx.text.orEmpty | |
.filter { [unowned self] _ in self.enableNickname } | |
.filterEmpty() | |
.distinctUntilChanged() | |
.subscribe(onNext: { [unowned self] _ in | |
try? self.validateNickname() | |
}) | |
.disposed(by: disposeBag) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment