首页 > 解决方案 > 电子邮件验证 / SwiftUi

问题描述

我创建了一个登录页面,但无法验证它。你能创建吗?我不希望他们未经验证就登录。我想要电子邮件验证和至少 8 个字符的密码。我正在学习新的swiftui。不幸的是,我没有信息可以做到这一点。

  @State private var username = ""
  @State private var password = ""
 
  
   var body: some View {
    NavigationView{
        
        VStack{//1-1//---
            
            TextField("username", text: $username)
                .frame(width: 300, height:50 , alignment: .center)
                .padding(5)
                .font(Font.system(size: 15, weight: .medium, design: .serif))
                  .overlay(RoundedRectangle(cornerRadius: 30).stroke(Color.init( red: 45/255, green: 0/255, blue: 112/255), lineWidth: 1))
            
          TextField("password", text: $password).frame(width: 300, height:50 ,alignment: .center)
                .padding(5)
                .font(Font.system(size: 15, weight: .medium, design: .serif))
                .overlay(RoundedRectangle(cornerRadius: 30).stroke(Color.init( red: 45/255, green: 0/255, blue: 112/255), lineWidth: 1))
            
           Button(action: {
                let url = "https:-----------------------"
                let params: [String: String] = ["email": username, "password": password]
                AF.request(url, method: .post, parameters: params).responseJSON {response in
                    switch response.result {
                    case .success : print(response.result)
                        
                    case .failure(let error) : print("error\(error)")
                }
                }
                
            
            
                
            }, label: {
                Text("Sign Up")
                    .padding(10)
                    .font(Font.system(size: 30, weight: .medium, design: .serif))
                    .foregroundColor(.white)
                    .background(RoundedRectangle(cornerRadius: 30))
                    .foregroundColor(.init(red: 45/255, green: 0/255, blue: 112/255))
            })

在此处输入图像描述

标签: iosswiftswiftui

解决方案


这是如何添加验证的演示。

import Combine
import SwiftUI

struct LoginViewV: View {
    
    @State private var email = ""
    @State private var password = ""
    
    var body: some View {
        VStack {
            
            TextField("Email", text: $email)
            TextField("Password", text: $password)
                .onReceive(Just(password), perform: { _ in
//                    This is for max char. If you want to set limit for character, set here
                    if password.count >= 12 {
                        password = String(password.prefix(12))
                    }
                })
            
            Button(action: {
                
                // Show error message here
                if let errorMessage = self.validView() {
                    print(errorMessage)
                    return
                }
                
                // Call login API here
                /**
                 login API
                 */
                
            }, label: {
                Text("Login")
            })
            Spacer()
        }
    }
    
    private func validView() -> String? {
        if email.isEmpty {
            return "Email is empty"
        }
        
        if !self.isValidEmail(email) {
            return "Email is invalid"
        }
        
        if password.isEmpty {
            return "Password is empty"
        }
        
        if self.password.count < 8 {
            return "Password should be 8 character long"
        }
        
        // Do same like other validation as per needed
        
        return nil
    }
    
    private func isValidEmail(_ email: String) -> Bool {
        let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
        let emailPred = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
        return emailPred.evaluate(with: email)
    }
}

推荐阅读