Как вы, вероятно, можете сказать по этому вопросу, я новичок в iOS / программировании: я пытаюсь реализовать проверку пароля, в которой пользовательский ввод должен содержать не менее 8 символов, содержать 1 заглавную букву, 1строчная буква, 1 цифра и 1 специальный символ .Я решил использовать регулярное выражение и расширение на UIViewController, чтобы сделать это. Я где-то читал, что мне нужно включить это за пределы моей области видимости "SignUpViewController" (не знаю почему) , что я и сделал. В БД есть открытые правила чтения / записи, так как я все еще тестирую вещи , так почему же он не проверяет эту проверку и не регистрирует пользователя каждый раз?Пожалуйста, помогите
Ниже приведен код:
import UIKit
import Firebase
class SignUpViewController: UIViewController {
//Outlets
@IBOutlet weak var firstNameText: UITextField!
@IBOutlet weak var lastNameText: UITextField!
@IBOutlet weak var emailText: UITextField!
@IBOutlet weak var passwordText: UITextField!
@IBOutlet weak var signUpButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func signUpButtonTapped(_ sender: Any) {
guard let firstName = firstNameText.text,
let lastName = lastNameText.text,
let email = emailText.text else { return }
guard emailText.containsValidEmail() else {
print("Invalid email. Please try again.")
return
}
let password = passwordText.text else { return }
guard passwordText.containsValidPassword() else {
print("Invalid password. Please try again.")
return
}
Auth.auth().createUser(withEmail: email, password: password) { (authResult, error) in
if let error = error {
debugPrint("Error creating user: \(error.localizedDescription)")
}
let changeRequest = Auth.auth().currentUser?.createProfileChangeRequest()
changeRequest?.displayName = firstName
changeRequest?.commitChanges(completion: { (error) in
if let error = error {
debugPrint(error.localizedDescription)
}
})
guard let userId = authResult?.user else { return }
let userData: [String: Any] = [
"firstName" : "",
"lastName" : "",
"User ID" : userId,
"dateCreated" : FieldValue.serverTimestamp(),
]
let db = Firestore.firestore()
db.collection("users").document("one").setData(userData) { err in
if let err = err {
print("Error writing document: \(err)")
} else {
print("Document successfully written!")
}
}
}
}
}
public extension UITextField {
func containsValidPassword() -> Bool {
let passwordRegex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[d$@$!%*?&#])[A-Za-z\\dd$@$!%*?&#]{8,}"
return NSPredicate(format: "SELF MATCHES %@", passwordRegex).evaluate(with: self.text)
}
}
public extension UITextField {
func containsValidEmail() -> Bool {
let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
return NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluate(with: self.text)
}
}
ОБНОВЛЕНИЕ 12/14: я отредактировал исходное сообщение, добавив расширения для проверки пароля и электронной почты.Я добавил проверку пароля с помощью расширения на UITextField.Однако, когда я пытаюсь сделать то же самое для электронной почты, я получаю ошибки компиляции.Почему это?