অ্যাপ্লিকেশন ডেভেলপ করার সময় একই ভ্যালিডেশন প্রতিটি ইনপুট ফিল্ডের জন্য লিখতে হয় কতবার? একটি উদাহরণ ইউজার রেজিস্ট্রেশন, লগিন স্ক্রিন বা রেজিস্ট্রেশন স্ক্রিন। প্রতিটি ফিল্ডের জন্য একই লাইন কোড লিখতে হয় যা ধারাবাহিক এবং ভুলের সম্ভাবনা রয়েছে।
ডিজাইন অনুযায়ী প্রতিটি ফিল্ডের জন্য আলাদা ভ্যালিডেশন লিখতে রিকমেন্ড করা হয় না, বরং জেনেরিক ভ্যালিডেশন ফাংশন লিখতে উচিত।
এই ব্লগে আমরা ইনপুট টেক্সট ফিল্ডের জেনেরিক ভ্যালিডেশন লাইব্রেরি লিখব।
জেনেরিক ভ্যালিডেশন লাইব্রেরি লেখার সুবিধা:
- সকল ফাংশনের জন্য রিয়ুজেবল কোড।
- মানব ভুলের সম্ভাবনা কমে।
- সেটআপ এবং কোডে হুক করা খুব দ্রুত।
- একটি ফাংশন রিরাইট করলে সব জায়গায় রিফ্লেক্ট হবে।
- একটি ফাংশন পরিবর্তন করলে সব জায়গায় পরিবর্তন হবে।
চলুন শুরু করি,
আমরা আমাদের ভ্যালিডেশন লাইব্রেরি এবং ভ্যালিডেশন অ্যাপ্লিকেশন তৈরি করব, যেখানে ৪টি ইনপুট ফিল্ড আমাদের লাইব্রেরি দিয়ে ভ্যালিডেট করব।
আমাদের লাইব্রেরি জেনেরিক এবং প্রয়োজন অনুযায়ী সম্পূর্ণ এক্সপ্যান্ডেবল।
Step 1 − Xcode, Single View Application, নাম দিন Validation।
Step 2 − নতুন ক্লাস তৈরি করুন, File → add new file → Swift file → Validation.swift।
Step 3 − Main.storyboard খুলুন এবং নিচের মত UI যোগ করুন।

আমরা ৪টি টেক্সট ফিল্ড এবং একটি বাটন যোগ করেছি। সব ফিল্ড দিয়ে ইউজার Validate বাটন ট্যাপ করলে সব ফিল্ড ভ্যালিডেট হবে এবং কোনটি ভুল প্রিন্ট করবে, সব ঠিক থাকলে "All Fields are correct" প্রিন্ট করবে।
Step 4 − বাটনের @IBAction এবং সব ইনপুট ফিল্ডের @IBOutlet তৈরি করুন।
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) {
}
}
Step 5 − Validation.swift খুলুন, এখানে আমরা ভ্যালিডেশন কোড যোগ করব।
নিচের কোড কপি করে 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
}
}
প্রয়োজন অনুযায়ী প্রতিটি ইনপুটের RegexString ম্যানিপুলেট করা যাবে।
Step 6 − ViewController.swift খুলুন, Validation.swift-এর অবজেক্ট তৈরি করুন।
var validation = Validation()
এখন guard দিয়ে ইনপুট ফিল্ডগুলো আনর্যাপ করব।
guard let name = validateNameTxtFld.text, let email = validateEmailTxtFld.text, let password = validatePasswordTxtFld.text,
let phone = validatePhoneTxtFld.text else {
return
}
Step 7 − এখন প্রতিটি ফিল্ডের জন্য আমাদের validate ফাংশন কল করব, এবং যদি false রিটার্ন করলে রিটার্ন করে "Field invalid" প্রিন্ট করব।
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
}
Step 8 − যদি সব ফিল্ড সঠিক হয় তবে "All fields are correct" প্রিন্ট করব।
if (isValidateName == true || isValidateEmail == true || isValidatePass == true || isValidatePhone == true) {
print("All fields are correct")
}
ফাইনাল ViewController.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")
}
}
}