Computer >> Máy Tính >  >> Lập trình >> IOS

Cách chung để xác thực đầu vào textField trong Swift

Tần suất bạn phát triển một ứng dụng và bạn viết xác nhận giống nhau cho mọi trường đầu vào. Một trong những ví dụ đó là Đăng ký người dùng, Màn hình đăng nhập hoặc Màn hình đăng ký hoặc bất kỳ màn hình nào khác. Việc viết cùng một dòng mã cho mọi trường đầu vào trở nên tẻ nhạt hơn nữa, bạn có thể nhầm lẫn giống nhau.

Theo thiết kế, bạn không nên viết xác thực cho từng trường, thay vào đó bạn nên viết các hàm xác thực chung.

Vì vậy, trong blog này, chúng tôi sẽ viết thư viện xác thực chung cho các Trường Văn bản đầu vào.

Ưu điểm của việc viết thư viện xác nhận gen.

  • Sử dụng lại mã có thể cho tất cả các chức năng.
  • Giảm thiểu khả năng do lỗi của con người.
  • Rất nhanh để thiết lập và kết nối với mã của bạn.
  • Có thể viết lại một hàm và sẽ phản ánh tất cả.
  • Thay đổi một chức năng sẽ thay đổi tất cả.

Hãy bắt đầu,

Chúng tôi sẽ phát triển thư viện xác thực và ứng dụng xác thực trong đó, chúng tôi sẽ xác thực 4 trường đầu vào với thư viện của mình.

Thư viện của chúng tôi sẽ được mở rộng chung và hoàn chỉnh theo nhu cầu.

Bước 1 - Mở ứng dụng Xcode, Single View, đặt tên là Validtion.

Bước 2 - Tạo lớp mới, Tệp - → thêm tệp mới - → Tệp Swift - → Validtion.swift.

Bước 3 - Mở Main.storyboard và thêm giao diện người dùng như hình dưới đây

Cách chung để xác thực đầu vào textField trong Swift

Chúng tôi đã thêm 4 trường văn bản và một nút, Sau khi nhập tất cả các trường khi người dùng nhấn vào các nút xác thực, nó sẽ xác thực tất cả các trường và in được nhập không chính xác, nếu mọi việc suôn sẻ, tất cả các trường đều đúng.

Bước 4 - Tạo @IBAction cho nút và @IBOutlet cho tất cả các trường đầu vào

import UIKit
class ViewController: UIViewController {
   override func viewDidLoad() {
      super.viewDidLoad()
   }
   @IBOutlet var validateNameTxtFld: UITextField!
   @IBOutlet var validateEmailTxtFld: UITextField!
   @IBOutlet var validatePasswordTxtFld: UITextField!
   @IBOutlet var validatePhoneTxtFld: UITextField!
   @IBAction func validateBtn(_ sender: Any) {
   }
}

Bước 5 - Mở Validation.swift, tại đây chúng tôi sẽ thêm mã xác thực của mình.

Sao chép mã dưới đây và pase trong Validation.swift

import Foundation
class Validation {
   public func validateName(name: String) ->Bool {
      // Length be 18 characters max and 3 characters minimum, you can always modify.
      let nameRegex = "^\\w{3,18}$"
      let trimmedString = name.trimmingCharacters(in: .whitespaces)
      let validateName = NSPredicate(format: "SELF MATCHES %@", nameRegex)
      let isValidateName = validateName.evaluate(with: trimmedString)
      return isValidateName
   }
   public func validaPhoneNumber(phoneNumber: String) -> Bool {
      let phoneNumberRegex = "^[6-9]\\d{9}$"
      let trimmedString = phoneNumber.trimmingCharacters(in: .whitespaces)
      let validatePhone = NSPredicate(format: "SELF MATCHES %@", phoneNumberRegex)
      let isValidPhone = validatePhone.evaluate(with: trimmedString)
      return isValidPhone
   }
   public func validateEmailId(emailID: String) -> Bool {
      let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
      let trimmedString = emailID.trimmingCharacters(in: .whitespaces)
      let validateEmail = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
      let isValidateEmail = validateEmail.evaluate(with: trimmedString)
      return isValidateEmail
   }
   public func validatePassword(password: String) -> Bool {
      //Minimum 8 characters at least 1 Alphabet and 1 Number:
      let passRegEx = "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$"
      let trimmedString = password.trimmingCharacters(in: .whitespaces)
      let validatePassord = NSPredicate(format:"SELF MATCHES %@", passRegEx)
      let isvalidatePass = validatePassord.evaluate(with: trimmedString)
      return isvalidatePass
   }
   public func validateAnyOtherTextField(otherField: String) -> Bool {
      let otherRegexString = "Your regex String"
      let trimmedString = otherField.trimmingCharacters(in: .whitespaces)
      let validateOtherString = NSPredicate(format: "SELF MATCHES %@", otherRegexString)
      let isValidateOtherString = validateOtherString.evaluate(with: trimmedString)
      return isValidateOtherString
   }
}

Chúng tôi có thể thao tác RegexString cho từng đầu vào theo yêu cầu.

Bước 6 - Mở ViewController.swift và tạo một đối tượng của Validation.swift

var validation = Validation()

Bây giờ, chúng tôi sẽ sử dụng bảo vệ để mở các trường đầu vào

guard let name = validateNameTxtFld.text, let email = validateEmailTxtFld.text, let password = validatePasswordTxtFld.text,
   let phone = validatePhoneTxtFld.text else {
   return
}

Bước 7 - Bây giờ chúng ta sẽ gọi các hàm xác thực của chúng ta cho từng trường và sẽ kiểm tra xem nó có trả về false hay không sẽ trả về và in “Trường không hợp lệ”

let isValidateName = self.validation.validateName(name: name)
if (isValidateName == false) {
   print("Incorrect Name")
   return
}
let isValidateEmail = self.validation.validateEmailId(emailID: email)
if (isValidateEmail == false){
   print("Incorrect Email")
   return
}
let isValidatePass = self.validation.validatePassword(password: password)
if (isValidatePass == false) {
   print("Incorrect Pass")
   return
}
let isValidatePhone = self.validation.validaPhoneNumber(phoneNumber: phone)
if (isValidatePhone == false) {
   print("Incorrect Phone")
   return
}

Bước 8 - Nếu tất cả các trường đều đúng, chúng tôi sẽ in “Tất cả các trường đều đúng”

if (isValidateName == true || isValidateEmail == true || isValidatePass == true || isValidatePhone == true) {
   print("All fields are correct")
}

Chúng tôi đã hoàn thành! Mã cuối cùng của thanh toán cho VeiwController.swift

import UIKit
class ViewController: UIViewController {
   var validation = Validation()
   override func viewDidLoad() {
      super.viewDidLoad()
   }
   @IBOutlet var validateNameTxtFld: UITextField!
   @IBOutlet var validateEmailTxtFld: UITextField!
   @IBOutlet var validatePasswordTxtFld: UITextField!
   @IBOutlet var validatePhoneTxtFld: UITextField!
   @IBAction func validateBtn(_ sender: Any) {
      guard let name = validateNameTxtFld.text, let email = validateEmailTxtFld.text, let password = validatePasswordTxtFld.text,
      let phone = validatePhoneTxtFld.text else {
         return
      }
      let isValidateName = self.validation.validateName(name: name)
      if (isValidateName == false) {
         print("Incorrect Name")
         return
      }
      let isValidateEmail = self.validation.validateEmailId(emailID: email)
      if (isValidateEmail == false) {
         print("Incorrect Email")
         return
      }
      let isValidatePass = self.validation.validatePassword(password: password)
      if (isValidatePass == false) {
         print("Incorrect Pass")
         return
      }
      let isValidatePhone = self.validation.validaPhoneNumber(phoneNumber: phone)
      if (isValidatePhone == false) {
         print("Incorrect Phone")
         return
      }
      if (isValidateName == true || isValidateEmail == true || isValidatePass == true || isValidatePhone == true) {
         print("All fields are correct")
      }
   }
}