Swift 中验证文本字段输入的通用方法

iosapps/applicationsmobile development更新于 2026/1/16 11:52:17

您开发应用程序时,是否经常会为每个输入字段编写相同的验证方法。例如,用户注册、登录屏幕、注册屏幕或任何其他屏幕。为每个输入字段编写相同的代码会变得非常繁琐,而且你可能会犯同样的错误。

根据设计,我们不建议为每个字段编写验证代码,而应该编写通用的验证函数。

因此,在本博客中,我们将编写输入文本字段的通用验证库。

编写通用验证库的优势。

  • 所有函数均可重用代码。
  • 减少人为错误的可能性。
  • 设置和挂载到代码中非常快。
  • 重写一个函数即可反映到所有函数中。
  • 更改一个函数将改变所有函数。

让我们开始吧!

我们将开发我们的验证库和验证应用程序,其中我们将使用我们的库验证 4 个输入字段。

我们的该库将是通用的,并可根据需要进行全面扩展。

步骤 1 − 打开 Xcode,单视图应用程序,并将其命名为 Validtion。

步骤 2 − 创建新类,文件 --> 添加新文件 --> Swift 文件 --> Validtion.swift。

步骤 3 − 打开 Main.storyboard 并添加如下所示的 UI

我们添加了 4 个文本字段和一个按钮。输入所有字段后,当用户点击验证按钮时,它会验证所有字段并打印出哪些字段输入错误。如果一切顺利,它会打印出所有字段都正确。

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

步骤 5 − 打开 Validation.swift,在这里我们将添加验证代码。

复制以下代码并传入 Validation.swift

import Foundation
class Validation {
   public func validateName(name: String) ->Bool {
      // 长度最多为 18 个字符,最少为 3 个字符,您可以随时修改。
      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。

步骤 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
}

步骤 7 −我们现在将为每个字段调用我们的验证函数,并检查它是否返回 false 并打印“字段无效”

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
}

步骤 8 − 如果所有字段都正确,我们将打印"所有字段均正确"

if (isValidateName == true || isValidateEmail == true || isValidatePass == true || isValidatePhone == true) {
   print("所有字段均正确")
}

大功告成!查看 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")
      }
   }
}

相关文章