로그인/회원가입 시 필요한 유효성 검사!

0 답변 글타래를 보이고 있습니다
  • 글쓴이
    • HyunJi
      참가자
      • 글작성 : 9
      • 답글작성 : 10

      유효성 검사는 정규 표현식을 활용하여 검사한다.

      • 아이디: 영문 소문자로만 1자리 이상
      • 비밀번호: 영문 소문자와 숫자 포함 6자리 이상

      구현은 텍스트필드 딜리게이트를 extension해서 적용했다.

      extension LoginViewController : UITextFieldDelegate{
          func textFieldDidEndEditing(_ textField: UITextField) {
              if textField == idTextField {
                  // 영문 소문자 1자리 이상
                  textFieldCheck(idTextField, idContainerView, idErrorLabel, "^[a-z]{1,}$", "영문 소문자만 사용해 주세요!")
              } else if textField == pwTextField {
                  // 영문 소문자 + 숫자 총 6자리 이상
                  textFieldCheck(pwTextField, pwContainerView, pwErrorLabel, "^[a-z0-9]{6,}$", "형식에 맞게 사용해 주세요!")
              }
          }
          func textFieldCheck(_ tf: UITextField,_ cv: RoundedCornerView,_ errorLabel: UILabel,_ regex: String, _ alert: String) {
              if !textFieldNullCheck(tf,cv, errorLabel) {
              } else if !gsno(tf.text).hasCharacter(regex: regex) {
                  // 컨테이너 뷰 빨간색으로 변경
                  cv.setColor(.ff6E6E)
                  errorLabel.text = alert
                  errorLabel.textColor = .ff6E6E
              } else {
                  cv.setColor(.lightGray)
                  errorLabel.text = " "
              }
          }
          func textFieldNullCheck(_ tf: UITextField,_ cv: RoundedCornerView,_ label: UILabel) -> Bool {
              if tf.text == "" {
                  // 컨테이너 뷰 빨간색으로 변경
                  cv.setColor(.ff6E6E)
                  label.text = "값을 입력해주세요"
                  label.textColor = .ff6E6E
                  return false
              } else { return true }
          }
          // 키보드 처리
          @objc func keyboardWillShow(notification: Notification) {
              self.view.frame.origin.y -= 50
          }
          @objc func keyboardWillHide(notification: Notification) {
              self.view.frame.origin.y = originY
          }
          override func viewWillAppear(_ animated: Bool) {
              registerForKeyboardNotifications()
          }
          override func viewWillDisappear(_ animated: Bool) {
              unregisterForKeyboardNotifications()
          }
          func registerForKeyboardNotifications() {
              NotificationCenter.default.addObserver(self, selector:#selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
              NotificationCenter.default.addObserver(self, selector:#selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
          }
          func unregisterForKeyboardNotifications() {
              NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil)
              NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil)
          }
          // 영역을 클릭하면 블루로 변경
          func textFieldDidBeginEditing(_ textField: UITextField) {
              if textField == idTextField {
                  idContainerView.setColor(.mainblue)
              } else {
                  if idContainerView.pathColor == .mainblue {
                      idContainerView.setColor(.lightGray)
                  }
              }
              if textField == pwTextField {
                  pwContainerView.setColor(.mainblue)
              } else {
                  if pwContainerView.pathColor == .mainblue {
                      pwContainerView.setColor(.lightGray)
                  }
              }
          }
          override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
              self.view.endEditing(true)
              if gsno(idTextField.text).hasCharacter(regex: "^[a-z]{1,}$") &&
                  gsno(pwTextField.text).hasCharacter(regex: "^[a-z0-9]{6,}$") {
                  loginButton.isEnabled = true
                  loginButton.backgroundColor = .mainblue
              } else {
                  loginButton.isEnabled = false
                  loginButton.backgroundColor = .lightGray
              }
          }
      }
      
0 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.

logo landscape small

사업자번호 : 743-81-02195
통신판매업 신고번호 : 제 2022-충북청주-1278 호
고객센터 : 카카오톡채널 @yagom