การเขียน 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

ขั้นตอนที่ 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")
}
}
}