class MainViewController: UIViewController {
let accountRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
let passwordRegex = "^(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,}$"
var accountIsValid = false
var passwordIsValid = false
emailTextfield.keyboardType = .emailAddress
passwordTextfield.keyboardType = .asciiCapable
emailTextfield.autocapitalizationType = .none
passwordTextfield.autocapitalizationType = .none
emailTextfield.autocorrectionType = .no
passwordTextfield.autocorrectionType = .no
override func viewDidLoad() {
super.viewDidLoad()
emailTextfield.addTarget(self, action: #selector(accountTextFieldDidChange),
for: .editingChanged)
passwordTextfield.addTarget(self, action: #selector(passwordTextFieldDidChange),
for: .editingChanged)
@objc func accountTextFieldDidChange(_ sender: UITextField) {
// 檢查帳號輸入格式
accountIsValid = NSPredicate(format: "SELF MATCHES %@",
accountRegex).evaluate(with: sender.text)
}
@objc func passwordTextFieldDidChange(_ sender: UITextField) {
// 檢查密碼輸入格式
passwordIsValid = NSPredicate(format: "SELF MATCHES %@",
passwordRegex).evaluate(with: sender.text)
}
}
}
accountRegex:這是一個儲存正則表達式的字串,用於驗證電子郵件帳號的格式是否正確。
passwordRegex:這是一個儲存正則表達式的字串,用於驗證密碼的格式是否正確。這個正則表達式要求密碼必須包含至少一個小寫字母、一個大寫字母和至少八個字符。
accountIsValid:這是一個布林值,用於表示帳號是否有效。初始設定為false,當帳號格式符合正則表達式時,會設定為true。
passwordIsValid:這是一個布林值,用於表示密碼是否有效。初始設定為false,當密碼格式符合正則表達式時,會設定為true。
鍵盤設定
在接下來的程式碼中,進行了以下鍵盤相關的設定:
emailTextfield.keyboardType:將emailTextfield(假設是一個文字輸入欄位)的鍵盤類型設定為電子郵件地址的輸入模式,以便在輸入時顯示適當的鍵盤。
passwordTextfield.keyboardType:將passwordTextfield(假設是一個文字輸入欄位)的鍵盤類型設定為ASCII可輸入模式,這是用於密碼輸入的通用鍵盤。
emailTextfield.autocapitalizationType:設定emailTextfield的自動大寫處理為"none",這表示不自動將輸入的文字轉為大寫。
passwordTextfield.autocapitalizationType:設定passwordTextfield的自動大寫處理為"none",同樣表示不自動轉為大寫。
emailTextfield.autocorrectionType和passwordTextfield.autocorrectionType:設定這兩個輸入欄位的自動校正為"no",這表示禁用自動校正功能,避免系統自動更正輸入。
視圖控制器的生命週期方法
在程式碼的最後部分,覆寫了viewDidLoad()方法,這是視圖控制器生命週期的一部分。在這個方法內,完成以下操作:
使用addTarget(:action:for:)方法為emailTextfield和passwordTextfield兩個輸入欄位添加了目標和動作。這意味著當這兩個輸入欄位的內容變化時,分別會調用accountTextFieldDidChange(:)和passwordTextFieldDidChange(_:)這兩個方法。
@objc func accountTextFieldDidChange(_ sender: UITextField):這是處理帳號輸入欄位變化的方法。它使用正則表達式來檢查輸入的帳號格式是否正確,並將結果存儲在accountIsValid中。
@objc func passwordTextFieldDidChange(_ sender: UITextField):這是處理密碼輸入欄位變化的方法。它使用正則表達式來檢查輸入的密碼格式是否正確,並將結果存儲在passwordIsValid中。
總之,這個程式碼片段用於設置並管理一個畫面中的文字輸入欄位,同時使用正則表達式來驗證帳號和密碼的格式是否符合要求。當使用者輸入時,它會即時檢查並更新相應的布林值,以供後續的操作和驗證使用。這是一個常見的用法,特別是在用戶註冊和登錄方面。