Skip to content

Instantly share code, notes, and snippets.

@hsleedevelop
Last active July 16, 2020 05:37
Show Gist options
  • Save hsleedevelop/a23fad58cfaecac850344508dbb7b479 to your computer and use it in GitHub Desktop.
Save hsleedevelop/a23fad58cfaecac850344508dbb7b479 to your computer and use it in GitHub Desktop.
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