Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> iOS

วิธี Validate TextField แบบ Generic ใน Swift

การเขียน Validation ซ้ำๆ สำหรับทุก Input Field (Register, Login) 造成 เบื่อและพลาดง่าย ควรเขียน Generic Validation Functions

ข้อดีของ Generic Validation Library

  • โค้ดใช้ซ้ำได้ทุกฟังก์ชัน
  • ลดโอกาสผิดพลาดของมนุษย์
  • ตั้งค่าและเชื่อมต่อเร็ว
  • แก้ไขหนึ่งที่ สะท้อนทุกที่

สร้าง Validation Library

สร้างแอปทดสอบ: 4 Text Fields + 1 ปุ่ม Validate

ขั้นตอนที่ 1: สร้างโปรเจกต์

Xcode → Single View Application → ชื่อ "Validation"

ขั้นตอนที่ 2: สร้าง Class Validation.swift

File → New File → Swift File → Validation.swift

ขั้นตอนที่ 3: ออกแบบ UI

Main.storyboard: 4 Text Fields + 1 ปุ่ม Validate

วิธี Validate TextField แบบ Generic ใน Swift

ขั้นตอนที่ 4: สร้าง IBOutlet/IBAction

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) { }
}

ขั้นตอนที่ 5: เขียน Validation.swift

import Foundation
class Validation {
public func validateName(name: String) -> Bool {
let nameRegex = "^\\w{3,18}$"
let trimmedString = name.trimmingCharacters(in: .whitespaces)
let validateName = NSPredicate(format: "SELF MATCHES %@", nameRegex)
return validateName.evaluate(with: trimmedString)
}
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)
return validatePhone.evaluate(with: trimmedString)
}
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)
return validateEmail.evaluate(with: trimmedString)
}
public func validatePassword(password: String) -> Bool {
let passRegEx = "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$"
let trimmedString = password.trimmingCharacters(in: .whitespaces)
let validatePassord = NSPredicate(format: "SELF MATCHES %@", passRegEx)
return validatePassord.evaluate(with: trimmedString)
}
public func validateAnyOtherTextField(otherField: String) -> Bool {
let otherRegexString = "Your regex String"
let trimmedString = otherField.trimmingCharacters(in: .whitespaces)
let validateOtherString = NSPredicate(format: "SELF MATCHES %@", otherRegexString)
return validateOtherString.evaluate(with: trimmedString)
}
}

สามารถปรับ Regex ตามความต้องการได้

ขั้นตอนที่ 6-8: ใช้งานใน ViewController

import UIKit
class ViewController: UIViewController {
var validation = Validation()
@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 { print("Incorrect Name"); return }
let isValidateEmail = self.validation.validateEmailId(emailID: email)
if !isValidateEmail { print("Incorrect Email"); return }
let isValidatePass = self.validation.validatePassword(password: password)
if !isValidatePass { print("Incorrect Pass"); return }
let isValidatePhone = self.validation.validaPhoneNumber(phoneNumber: phone)
if !isValidatePhone { print("Incorrect Phone"); return }
if isValidateName || isValidateEmail || isValidatePass || isValidatePhone {
print("All fields are correct")
}
}
}