Swift 中验证文本字段输入的通用方法
您开发应用程序时,是否经常会为每个输入字段编写相同的验证方法。例如,用户注册、登录屏幕、注册屏幕或任何其他屏幕。为每个输入字段编写相同的代码会变得非常繁琐,而且你可能会犯同样的错误。
根据设计,我们不建议为每个字段编写验证代码,而应该编写通用的验证函数。
因此,在本博客中,我们将编写输入文本字段的通用验证库。
编写通用验证库的优势。
- 所有函数均可重用代码。
- 减少人为错误的可能性。
- 设置和挂载到代码中非常快。
- 重写一个函数即可反映到所有函数中。
- 更改一个函数将改变所有函数。
让我们开始吧!
我们将开发我们的验证库和验证应用程序,其中我们将使用我们的库验证 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")
}
}
}

